タグ付けされた質問 「sql-server-2008-r2」

SQL Server 2008 R2(メジャービルドバージョン10.50.xxxx)。また、sql-serverでタグ付けしてください。

2
ID列をINTからBIGINTに変更する
主キーでもあるID列を持つテーブルがあります。現在、5000万行あり、identity列の最高値は148,921,803です。テーブルには多くのがあり、そのテーブルDELETEでINSERTS実行されるため、値が高くなります。 私たちは、からのデータ型を変更したいINTとBIGINT多くの行を追加するための準備します。PK列への参照がないことに注意してください。 最小限のダウンタイムでこれを行うための最良の方法は何ですか?2つのオプションがあります。 PKをドロップして列を変更します。または ここで説明するように、copy-drop-renameメソッド:

1
インデックス列の順序のWHERE-JOIN-ORDER-(SELECT)ルールは間違っていますか?
より大きなクエリの一部であるこの(サブ)クエリを改善しようとしています。 select SUM(isnull(IP.Q, 0)) as Q, IP.OPID from IP inner join I on I.ID = IP.IID where IP.Deleted=0 and (I.Status > 0 AND I.Status <= 19) group by IP.OPID Sentry Plan Explorerは、上記のクエリによって実行された、テーブルdbo。[I]の比較的コストのかかるキールックアップを指摘しました。 テーブルdbo.I CREATE TABLE [dbo].[I] ( [ID] UNIQUEIDENTIFIER NOT NULL, [OID] UNIQUEIDENTIFIER NOT NULL, [] UNIQUEIDENTIFIER NOT NULL, [] …

4
テーブルごとにデータとディスク使用の内訳を表示
SQL Server 2008 R2データベースをいくつかの展開されたプログラムで使用しています。 質問:データベース内のすべてのテーブルについて、各テーブルが消費する領域を表示し、論理領域とディスク領域を区別する簡単な方法はありますか? SSMS(Management Studio)を使用している場合、データベースに表示されるストレージプロパティは167 MBであり、3 MBが「利用可能」です(約適切なサイズですが、3 MBが利用可能かどうか心配です-これは心配する限界です) 、十分なディスク容量があることを知っているとしたら?) 各テーブルにドリルダウンできますが、それを行うには永遠にかかります。 独自のクエリを記述してテストできることはわかっていますが、これを行う簡単な(組み込み?)方法が既にあるかどうかを知りたいです。



1
表示するデータがないときにTablixの構造を維持する方法
Tablixのデータセットの結果を示すSSRSレポートがあります。データセット内のクエリがデータを返さない場合、Tablixのヘッダーは表示されますが、ヘッダーの下のTablixセルは表示されません。にプロパティがあることは知っていますNoRowMessageが、実際には私たちが望むものではありません。メッセージを指定すると、SSRSは空のtablixではなくメッセージを表示します.tablix構造をそのまま表示する必要がありますが、空のセルが必要です。 IsNothing関数を使用してtablixの各セル値にルールを設定し、値がnullの場合に空白( "")を表示するように設定しましたが、役に立ちませんでした。 何か考えはありますか?よろしくお願いします。

4
データベースがオンラインのときにデータベースのファイルをコピーできますか?
SQL Server 2008 R2 SP1で運用データベースの開発用コピーをセットアップする作業をしています。ライブデータベースは、現在2人の開発者が読み取り専用クエリで軽く使用していますが、新しいデータベースでも更新が行われます。 データベースは2.1TBで、テストに必要な最新のビルドに復元して更新するのに合計3日かかったので、私の元々の計画は、新しいバックアップファイルセットを作成し、それらのファイルから復元することでした。これにより、現在のデータベースをオフラインにすることなく、同じSQLインスタンスとマシン上にデータベースの開発コピーを作成できます。 ただし、この2、3日を節約するために、物理データベースファイルをコピーして、データベースの新しいコピーを添付することをお勧めします。残念ながら、コピーしようとすると、SQL Serverがそれらのファイルにかけるロックを参照するエラーが発生します。 データベースをオフラインにすることはできませんが、ログファイルを転送するだけです(朝に入る前にこれを完了できます)。データベースをオフライン状態にせずにライブデータベースファイルをコピーする方法はありますか?それとも、家に帰るまで待つべきでしょうか?

3
非クラスター化インデックスはクラスター化インデックスよりも高速ですか?
両方のテーブルは同じ構造で、各テーブルに19972行あります。インデックス作成を練習するために、同じ構造の両方のテーブルを作成して作成しました clustered index on persontb(BusinessEntityID) そして nonclustered index on Persontb_NC(BusinessEntityId) およびテーブル構造 BusinessEntityID int FirstName varchar(100) LastName varchar(100) -- Nonclusted key on businessentityid takes 38% SELECT BusinessEntityId from Persontb_NC WHERE businessentityid BETWEEN 400 AND 4000 -- CLustered key businessentityid takes 62% SELECT BusinessEntityId from persontb WHERE businessentityid BETWEEN 400 AND 4000 …

3
ロックが使用するメモリ
ちょっと不思議ですが、データベースのRAMサイズが128 GBのSQL 2012 Enterpriseエディションの1つは370 GBであり、ロック(OBJECTSTORE_LOCK_Manager)のメモリクラークが使用するメモリの量は7466016 KBを示します。パフォーマンスカウンターを見ても確認できますselect * from sys.dm_os_performance_counters where counter_name = 'Lock Memory (KB)' ただし、クエリを実行すると select count(*) from sys.dm_tran_locks 16個のロックのみが表示されます。つまり、7 GBを超えるロックを使用しているものです。調べる方法はありますか? いったんロック用のメモリが割り当てられたら、SQLはまだそれを割り当て解除していないのですか?過去1時間で、ロックカウントが500を超えていないようですが、ロックメモリは同じままです。 最大サーバーメモリは106 GBです。メモリ内でロックページを使用していないため、過去12時間のメモリログにエラーが発生したり、メモリ不足が発生したりすることはありません。Available MBytesカウンタは、15 GBを超える使用可能なメモリを示しています。 アクティビティモニターは常に待機中のタスクを0と表示するため、明らかにブロックされません。 SQLサーバーのロックには約100バイトのメモリが必要であることを考慮すると、7 GBは大量のメモリであり、誰がそれを使用しているかを調べようとします。 ロックカウントでサーバーダッシュボードレポートのトップトランザクションを実行すると、「現在、システム上でロックトランザクションは実行されていません。ただし、ロックメモリは上記のように表示されます。DBは夜間に最もビジーです。

1
クロスデータベーストランザクションを実行する場合、どのトランザクションログに情報が保存されますか?
次のスニペットがあるとします。 -- error checking omitted for brevity begin tran exec database1..my_stored_procedure exec database2..my_other_stored_procedure if (@@error <> 0) rollback commit トランザクション情報はどのデータベースのトランザクションログに挿入されますか? database1トランザクションログを再生しようとしても、そのDBだけに影響を与えるのでは意味がないので、両方のログがすべてのデータを取得すると思います。また、存在しないdatabase1サーバーでdatabase2はのトランザクションログを再生できず、その逆も同様です。 ..しかし、私は修正にオープンです!

1
SQL Serverの複数のインスタンスのメモリを構成するにはどうすればよいですか?
同じ仮想サーバー上で実行される一連のSQL Serverインスタンス(2008 R2)があります。各インスタンスは、開発サイクル(開発/テスト/ステージなど)のステージを表します。すべてのインスタンスは常にオンラインである必要がありますが、リリースライフサイクルのどこにいるかによって、負荷は一度に1つのインスタンスに分離される傾向があります。 SQL Serverは、最大値として設定したメモリ量を取得して保持するようです。インスタンスがメモリ消費について「スマート」になるように構成して、必要なときに互いがメモリを取得するのをブロックしないようにする方法があるかどうかを知りたい。

2
大規模なSQL Serverデータベースのバックアップ中にデータ更新操作を実行する
大規模な(数千万レコードの)データベースがあり、データベースの完全バックアップを実行します。 ただし、データベースは十分に大きいため、バックアップの実行前および実行中にトランザクションを開始できるだけでなく、バ​​ックアップの実行中および実行後にコミットすることもできます。 例えば: T0 = Transaction A start T1 = Full database backup start T2 = Transaction B start (will not deadlock with A) T3 = Transaction A commit/rollback (does not matter, does it?) T4 = Full database backup end T5 = Transaction B commit/rollback (again, does not matter, does …

2
REBUILD-クラスタ化インデックス、TABLE、またはその両方?
これに関する決定的なリソースをどこでも見つけるのに苦労しているので、グルがここで答えを出してくれるといいのですが。 列を追加する必要がある非常に大きなテーブルがあります。クラスタ化インデックスはかなり高度に断片化されておりALTER INDEX REBUILD、クリーンアップするために実行したいと思います。 また、通常はALTER TABLE REBUILD列を変更するときにも行います。これにより、その操作からのポインターまたは分割がクリーンアップされるためです。 クラスター化インデックス(基本的にはテーブル)について話しているので、両方を実行する必要がありますか? 私の疑いは、ALTER INDEX REBUILDクラスター化された意志が意志のすべてを更新するわけではないALTER TABLEことですがALTER TABLE、インデックスの断片化がクリーンアップされないことも心配です。

1
where句で 'contains'と '='を一緒に使用するとクエリが遅くなる
次のクエリは、12kレコードのテーブルで完了するまでに約10秒かかります select top (5) * from "Physician" where "id" = 1 or contains("lastName", '"a*"') しかし、where句を次のいずれかに変更した場合 where "id" = 1 または where contains("lastName", '"a*"') すぐに戻ります。 両方の列にインデックスが付けられ、lastName列にもフルテキストインデックスが付けられます。 CREATE TABLE Physician ( id int identity NOT NULL, firstName nvarchar(100) NOT NULL, lastName nvarchar(100) NOT NULL ); ALTER TABLE Physician ADD CONSTRAINT Physician_PK PRIMARY …

4
整数入力から日付を再構築する最良の方法は何ですか?
私はたくさんの財務レポートを持っています。それらを変数として2つの入力(年と四半期)に渡せるようにしたいと考えています。 私はこのようにしていますが、本当に好きではありません。 declare @quarter int, @year int, @date date set @quarter = 4 set @year = 2018 set @date = cast(@year as varchar(4)) + '-01-01' set @date = dateadd(quarter, @quarter - 1, @date) print @date 質問整数入力から日付を再構築する最良の方法は何ですか? 望ましい結果: 2018-10-01

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.