[SQL Server] Statistiques : comment déterminer la date de dernière mise-à-jour des statistiques ?

Ce billet présente comment déterminer la date de dernière mise-à-jour des statistiques, avec DBCC SHOW STATISTICS et STATS_DATE().

Utilisation de DBCC SHOW_STATISTICS

La commande DBCC SHOW_STATISTICS permet de retourner des informations relatives aux statistiques d’optimisation de la requête pour une table (ou vue indexée), telles que l’en-tête, l’histogramme et le vecteur de densité…

La syntaxe générale est la suivante :

DBCC SHOW_STATISTICS ( table_or_indexed_view_name , target )
[ WITH [ NO_INFOMSGS ] < option > [ , n ] ]
< option > :: =
 STAT_HEADER | DENSITY_VECTOR | HISTOGRAM | STATS_STREAM
Les options relatives à l’en-tête, le vecteur de densité et l’histogramme sont seulement disponibles à partir de SQL Server 2005.

Ou pour faire plus simple :

DBCC SHOW_STASTISTICS ('<table_name>', '<index_name> ou <statistics_name>')

Voici la requête pour la table Production.TransactionHistory et son index PK_TransactionHistory_TransactionID :

DBCC SHOW_STATISTICS('Production.TransactionHistory','PK_TransactionHistory_TransactionID')
GO

Et son résultat :


On peut notamment remarquer la dernière date de mise-à-jour (Updated).

Utilisation de STATS_DATE()…

La fonction STATS_DATE() fournit la date de la mise-à-jour la plus récente des statistiques d’une table ou d’une vue indexée.

… Avec sys.indexes

La table système sys.indexes

USE AdventureWorks
GO
SELECT i.name AS index_name ,
 s.name AS statistic_name ,
 STATS_DATE(i.object_id, index_id) AS statistic_update_date
FROM sys.indexes
WHERE i.object_id = OBJECT_ID('Production.TransactionHistory')
GO

permet de récolter des informations relatives à un ou plusieurs indexes.

La requête ci-dessus permet de lister, pour un objet donné (ici, la table Production.TransactionHistory de la base AdventureWorks) tous les indexes et la dernière mise-à-jour de leurs statistiques, dont voici un exemple de résultat :


… Avec sys.stats

La vue de catalogue sys.stats
fournit des informations relatives aux statistiques des tables, indexes ou vues indexées.

USE AdventureWorks
GO
SELECT s.name AS statistic_name ,
 STATS_DATE(s.object_id, stats_id) AS statistic_update_date
FROM sys.stats s
WHERE s.object_id = OBJECT_ID('Production.TransactionHistory')
GO

La requête ci-dessus permet de lister, pour un objet donné (ici, la table Production.TransactionHistory de la base AdventureWorks) toutes les statistiques et leur dernière mise-à-jour, dont voici un exemple de résultat :


Pour aller plus loin…

Vous pouvez consulter les billets relatifs aux statistiques ici.

Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s