Les informations contenues dans sys.dm_db_index_usage_stats sont-elles fiables

8

J'archive des données d'un ancien système qui n'a aucune documentation. J'ai de la chance...

Je voudrais savoir quand les tables ont été créées, accédées pour la dernière fois, etc. Puis-je espérer que cette requête me donnera la bonne réponse ou y a-t-il des paramètres que je dois d'abord vérifier? 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
la source

Réponses:

15

Non.

La sys.dm_db_index_usage_statvue reflète uniquement, au mieux, les données depuis le dernier démarrage de la base de données (dernier démarrage de l'instance ou dernière fois que la base de données a été mise en ligne). De plus, les entrées peuvent s'effacer sous la pression de la mémoire. Il donnera des positifs précis (si une table a des statistiques non nulles, il est utilisé)) mais peut donner de faux négatifs (0 utilisation dans les statistiques peut ne pas refléter l'utilisation réelle). Il existe également de nombreux systèmes qui n'utilisent certaines tables qu'une fois par semaine, une fois par mois ou même une fois par an.

Remus Rusanu
la source
3

Voici une autre raison pour laquelle vous ne pouvez pas compter aveuglément sur DMV sys.dm_index_usage_stats. sys.dm_db_index_usage_stats n'est pas mis à jour après qu'un index est utilisé uniquement pour les statistiques associées aux colonnes indexées. Paul l'a montré dans son lien.

Ce que sys.dm_index_usage_stats DMV ne vous dit pas

Vous aimeriez aussi lire

Cet article sur les statistiques d'utilisation des index DMV

De plus, l'OMI, je ne pense pas qu'en utilisant DMV, il existe un moyen PARFAIT de savoir quand la table a été utilisée pour la dernière fois. Je pense que l'utilisation de la trace du profileur ou de la trace d'événements étendue serait une meilleure option. Bien que le profileur puisse entraîner une charge, la trace côté serveur est une bonne option.

Shanky
la source