Published on

July 16, 2012

Comprendre les statistiques de SQL Server

Lorsqu’il s’agit d’optimiser les performances de vos requêtes SQL Server, un facteur important à prendre en compte est la fraîcheur de vos statistiques. Les statistiques fournissent à l’optimiseur de requêtes des informations sur la distribution des données dans vos tables, lui permettant de prendre des décisions éclairées sur le plan de requête le plus efficace. Cependant, si vos statistiques sont obsolètes ou périmées, l’optimiseur de requêtes peut ne pas être en mesure de choisir le meilleur plan, ce qui entraîne une performance de requête plus lente.

Dans un article précédent, nous avons discuté de la façon de savoir quels index sont présents sur une table en utilisant l’interface graphique et comment générer une liste des index pour une table ou pour l’ensemble de la base de données en utilisant une requête. Aujourd’hui, nous allons étendre ces requêtes pour inclure la date de la dernière mise à jour des statistiques.

Pour cela, nous utiliserons la fonction système STATS_DATE. Cette fonction renvoie la date de la dernière mise à jour des statistiques d’une table ou d’une vue d’index. En incluant ces informations dans nos requêtes, nous pouvons facilement déterminer la fraîcheur des statistiques et identifier les goulots d’étranglement potentiels en termes de performances.

Jetons un coup d’œil à l’exemple suivant :

USE AdventureWorksDW2008R2;

SELECT o.name AS TableName,
       i.name AS IndexName,
       i.type_desc AS IndexType,
       STATS_DATE(i.object_id, i.index_id) AS StatisticsDate
FROM sys.indexes i
JOIN sys.objects o ON i.object_id = o.object_id
WHERE o.type = 'U' -- Obtenir uniquement les index pour les tables créées par l'utilisateur
AND i.name IS NOT NULL
ORDER BY o.name, i.type;

Cette requête génère une liste des tables, de leurs noms d’index, de leurs types d’index et de la date de la dernière mise à jour des statistiques pour chaque table de la base de données AdventureWorksDW2008R2. En examinant les résultats, vous pouvez facilement identifier les tables avec des statistiques obsolètes qui peuvent avoir un impact sur les performances des requêtes.

Si vous souhaitez uniquement consulter les statistiques pour une table spécifique, vous pouvez appliquer un filtre sur le nom dans la table sys.objects, comme le montre l’exemple suivant :

USE AdventureWorksDW2008R2;

SELECT o.name AS TableName,
       i.name AS IndexName,
       i.type_desc AS IndexType,
       STATS_DATE(i.object_id, i.index_id) AS StatisticsDate
FROM sys.indexes i
JOIN sys.objects o ON i.object_id = o.object_id
WHERE o.type = 'U' -- Obtenir uniquement les index pour les tables créées par l'utilisateur
AND i.name IS NOT NULL
AND o.name = 'DimProduct'
ORDER BY o.name, i.type;

Cette requête vous fournira les statistiques spécifiques de la table ‘DimProduct’.

En surveillant régulièrement la fraîcheur de vos statistiques et en les mettant à jour si nécessaire, vous pouvez vous assurer que l’optimiseur de requêtes dispose des informations les plus précises pour prendre des décisions optimales. Cela peut grandement améliorer les performances de vos requêtes SQL Server.

J’espère que vous avez trouvé cet article utile pour comprendre les statistiques de SQL Server. Si vous avez des questions ou des suggestions, n’hésitez pas à laisser un commentaire ci-dessous. Et n’oubliez pas de me suivre sur Twitter à @yourusername pour plus de conseils et astuces sur SQL Server !

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.