Question

C’est une tâche triviale de déterminer si un objet est référencé par quelque chose d’autre ou non. Ce que je voudrais faire, c’est d’identifier s’il est réellement utilisé ou non.

Ma solution impliquait à l'origine la combinaison d'une table contenant une liste d'objets de la base de données et d'un travail horaire.

Le travail a fait deux choses. Tout d'abord, il a recherché de nouveaux objets ajoutés à la base de données depuis la dernière exécution. Deuxièmement, il a examiné le cache d'objets de SQL. Si un objet de la table était répertorié dans la mémoire cache, il était marqué dans la table comme ayant été récemment "vu". en cours d'utilisation.

À la fin d'une période de six mois ou autre, le contenu du tableau a été examiné. Tout ce qui était répertorié dans le tableau et qui n'avait pas été vu depuis le début de la surveillance était sans danger pour la sauvegarde et la suppression.

Bien sûr, il est possible que des objets ne soient utilisés qu'une fois par an, par exemple, mais cela semble fonctionner dans la plupart des cas.

C'était un peu pénible de travailler avec.

Je travaille avec une demi-douzaine de bases de données, la majorité d'entre elles contenant des tonnes de tables héritées, qui subsistent longtemps après que leurs créateurs d'origine sont passés à d'autres sociétés.

Ce que je recherche, c’est une méthode assez fiable pour garder trace du moment où un objet (table, vue, procédure stockée ou fonction) est appelé.

Pour ceux d'entre vous qui surveillent actuellement ce genre de choses, quelle méthode / quel code utilisez-vous et le recommanderiez-vous?

Était-ce utile?

La solution

Avec SQL Server 2005, vous pouvez utiliser la vue de gestion dynamique sys.dm_db_index_usage_stats. Le nom dit " index " mais c'est un peu trompeur - chaque table a une entrée ici, même si elle n'a pas d'index. Voici une requête utile de SQL Magazine:

SELECT 
  t.name AS 'Table', 
  SUM(i.user_seeks + i.user_scans + i.user_lookups) 
    AS 'Total accesses',
  SUM(i.user_seeks) AS 'Seeks',
  SUM(i.user_scans) AS 'Scans',
  SUM(i.user_lookups) AS 'Lookups'
FROM 
  sys.dm_db_index_usage_stats i RIGHT OUTER JOIN 
    sys.tables t ON (t.object_id = i.object_id)
GROUP BY 
  i.object_id, 
  t.name
ORDER BY [Total accesses] DESC

Voici l'article original:

http://www.sqlmag.com/Article/Article/ArticleID/53878/ sql_server_53878.html

N'oubliez pas que ces statistiques d'utilisation sont réinitialisées au redémarrage de SQL Server.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top