web-dev-qa-db-ja.com

sys.dm_db_index_physical_statsが非常に遅い

1つのテーブル(月ごとに分割)に並列挿入(毎日の読み込み時間を短縮する)があるため、このテーブルのクラスター化インデックスは非常に断片化される傾向があるため、約4.5 TBのデータベースがあります。このテーブルでsys.dm_db_index_physical_stats(制限付き)から選択すると、経過時間(> 4〜5時間)がかかります。このテーブルのパーティションの断片化レベルをチェックするより速くより良い方法はありますか?これにかかる現在の時間は完全に受け入れられません。

3
nojetlag

データベース全体に対してDMVを実行しないでください。代わりに、特定のテーブルまたはインデックスに対して実行してください。データベースのサイズが非常に大きいため、時間がかかります。

このDMVにさらに時間がかかる理由について、 Paul Randalの説明 を読む必要があります。

DMVの考え方は、インデックスの物理属性(およびヒープの特殊なケース)を表示することです。これを行うには、インデックスを構成するページをスキャンし、統計を計算する必要があります。多くのDMVは、いわゆる述語プッシュダウンをサポートしています。つまり、WHERE句を指定すると、DMVはそれを考慮して情報を準備します。このDMVはサポートしていません。論理的な断片化が30%を超えるデータベース内のインデックスのみを要求すると、すべてのインデックスがスキャンされ、基準を満たすインデックスのみが通知されます。これを行う必要があるのは、分析するまで基準を満たすものを知る方法がないため、述語のプッシュダウンをサポートできないためです。

あなたは試しましたか Ola Hallengren インデックスの再構築のためのソリューション。

彼の記事で述べたように、さまざまなモードを試すことができます。しかし、制限付きも4〜5時間かかったとおっしゃっていたように、これがDMVと同じだと思います。その実際には遅く、MSでさえ同じことを信じています。

インデックスの再構築はメンテナンスアクティビティと見なされ、サーバーの負荷が比較的少ない場合、またはメンテナンスウィンドウ中に実行する必要があります。

4
Shanky