web-dev-qa-db-ja.com

欠落しているインデックスdmvカウントは毎日異なります

Missigインデックスdmvに質問があります。

BOLによると

Sys.dm_db_missing_index_detailsによって返される情報は、クエリがクエリオプティマイザーによって最適化されると更新され、永続化されません。欠落しているインデックス情報は、SQLServerが再起動されるまでのみ保持されます。データベース管理者は、サーバーのリサイクル後に保持したい場合は、不足しているインデックス情報のバックアップコピーを定期的に作成する必要があります。

私は基本的に、次の(簡単に簡略化された)クエリを使用してこれを行います。

SELECT <SomeFieldsAndCalculations> FROM sys.dm_db_missing_index_details AS d
INNER JOIN sys.dm_db_missing_index_groups AS g ON d.index_handle = g.index_handle
INNER JOIN sys.dm_db_missing_index_group_stats AS s ON g.index_group_handle = s.group_handle
INNER JOIN Database1.sys.objects o on d.[object_id] = o.[object_id]
INNER JOIN Database1.sys.schemas sch on sch.[schema_id] = o.[schema_id]

結果は、10個のSQLサーバーから1日1回テーブルに書き込まれます(正しいグループ化オプションを使用...)。

この表を見ると、欠落しているインデックスの数が大きく異なることがわかります。これらは、行にある(複数のインスタンスにわたる)欠落しているインデックスの総数です。

3091 3133 3090 3135 3131 2506 2750 2028 2032 2195 2274 2269 2272 2373

サービスは再開されていません。

BOLからの紹介から、日によってごくわずかな違いがわかりました。 1日にポップアップする欠落しているインデックスが、翌日もdmvにあると仮定すると、合計カウントはどのように大きく変化するのでしょうか。たとえば、24時間で3131から2506に減少しますか?これは、インスタンスごとに約60の変更です... 2272から2373への増加数と同じです-24時間以内にインスタンスごとに突然10個の追加のインデックスが失われます...?

その期間中、インデックスは作成されていません。ただし、その期間中に未使用のインデックスは削除されました。未使用のインデックスと欠落しているインデックスの削除の関係がわかりません...

質問

  • SQLサービスが中断することなく実行されている場合、不足しているインデックス情報は上記のクエリからどのくらいの期間返されますか?

  • 欠落しているインデックスの数に何が影響した可能性がありますか?

3
Magier

参照されているテーブルが変更された場合、欠落しているインデックス情報はビューからクリアされます。列が追加され、新しいインデックスがこのデータを消去します。インデックスを削除すると、そのテーブルの欠落しているインデックス情報もすべて削除されます。

インデックスの再構築でもこの情報が消去されるため、夜間にインデックスメンテナンスを行う場合、これが数の変化に寄与する可能性があります。 (編集:2012+で欠落しているインデックス情報のみを再構築します)

6
Bob Klimes