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


8

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

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

回答:


15

番号。

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


3

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

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

あなたも読みたいです

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

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

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