web-dev-qa-db-ja.com

sys.dm_db_index_usage_statsの情報は信頼できるか

ドキュメントがない古いシステムのデータをアーカイブしています。私は幸運...

テーブルが作成された日時、最後にアクセスされた日時などを確認したいのですが、このクエリで正しい答えが得られると信頼できますか、それとも最初に確認する必要があるパラメータがありますか? SQL Server 2008 R2:

 SELECT t.Name AS Tabelname, p.rows AS NoOfRows, MAX(us.last_user_lookup) AS LastUsed, t.create_date AS CreatedDate
FROM sys.tables t
INNER JOIN      
    sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN 
    sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
LEFT JOIN --A lot of the tables did not have any records in this table
    sys.dm_db_index_usage_stats as us ON t.OBJECT_ID = us.OBJECT_ID
GROUP BY t.Name, p.rows, create_date
ORDER BY MAX(us.last_user_lookup) DESC
8
ekenman

番号。

sys.dm_db_index_usage_statビューは、最後のデータベースの起動(最後のインスタンスの起動、またはDBが最後にオンラインにされたとき)以降のデータのみを反映します。さらに、メモリ不足によりエントリがクリアされる場合があります。正確なポジティブを提供します(テーブルにゼロ以外の統計がある場合、それが使用されます))が、偽のネガティブを提供する場合があります(統計の0の使用は実際の使用を反映しない場合があります)。また、特定のテーブルを1週間に1回、1か月に1回、または1年に1回使用するシステムも数多くあります。

15
Remus Rusanu

ここに、DMV sys.dm_index_usage_statsに盲目的に依存できないもう1つの理由があります。 sys.dm_db_index_usage_statsは、インデックス付けされた列に関連付けられている統計情報のみにインデックスが使用された後は更新されません。パウロはこれをリンクで示しました。

sys.dm_index_usage_stats DMVが教えてくれないこと

あなたも読みたいです

インデックス使用統計DMVに関するこの記事

さらに、IMOはDMVを使用することで、テーブルが最後にいつ使用されたかを知るための完璧な方法があるとは思いません。 Iプロファイラートレースまたは拡張イベントトレースを使用することをお勧めします。プロファイラーは負荷を引き起こす可能性がありますが、サーバー側のトレースが適切なオプションです。

3
Shanky