Sind Informationen in sys.dm_db_index_usage_stats zuverlässig?

8

Ich archiviere Daten von einem alten System ohne Dokumentation. Ich Glückspilz...

Ich möchte herausfinden, wann die Tabellen erstellt wurden, zuletzt darauf zugegriffen wurde usw. Kann ich darauf vertrauen, dass diese Abfrage mir die richtige Antwort gibt, oder gibt es einige Parameter, die ich zuerst überprüfen muss? 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
Colin 't Hart
quelle

Antworten:

15

Nein.

Die sys.dm_db_index_usage_statAnsicht spiegelt bestenfalls Daten seit dem letzten Datenbankstart (letzter Instanzstart oder letztes Mal, als die Datenbank online geschaltet wurde) wider. Außerdem können die Einträge unter Speicherdruck gelöscht werden. Es gibt genaue positive Ergebnisse (wenn eine Tabelle Statistiken ungleich Null enthält, wird sie verwendet), kann jedoch falsche negative Ergebnisse liefern (0 Verwendung in Statistiken spiegelt möglicherweise nicht die tatsächliche Verwendung wider). Es gibt auch viele Systeme, die bestimmte Tabellen nur einmal pro Woche, einmal pro Monat oder sogar einmal pro Jahr verwenden.

Remus Rusanu
quelle
3

Hier ist ein weiterer Grund, warum Sie sich nicht blind auf DMV sys.dm_index_usage_stats verlassen können. sys.dm_db_index_usage_stats wird nicht aktualisiert, nachdem ein Index nur für die Statistiken verwendet wurde, die den indizierten Spalten zugeordnet sind. Paul hat dies in seinem Link gezeigt.

Was sys.dm_index_usage_stats DMV Ihnen nicht sagt

Sie möchten auch gerne lesen

Dieser Artikel über Indexnutzungsstatistiken DMV

Darüber hinaus glaube ich nicht, dass es bei Verwendung von DMV eine PERFEKTE Möglichkeit gibt, herauszufinden, wann die Tabelle zuletzt verwendet wurde. Ich glaube, die Verwendung der Profiler-Ablaufverfolgung oder der erweiterten Ereignisablaufverfolgung wäre eine bessere Option. Obwohl der Profiler eine Last verursachen kann, ist die serverseitige Ablaufverfolgung eine gute Option.

Shanky
quelle