SET STATISTICS IO ON

Récemment, j’ai été confronté à une requête dont la durée n’était pas acceptable d’un point de vu fonctionnel. J’ai donc mis en place une trace a l’aide du profiler et j’ai recopié le texte dans un analyseur de requête. J’ai activé l’affichage des entrées/sorties disque et j’ai exécuté la requête problématique. Voici le résultat des IO disque :

Table ‘a’. Scan count 866, logical reads 2598, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

Table ‘b’. Scan count 568, logical reads 1640689238, physical reads 0, read-ahead reads 6, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

Table ‘c’. Scan count 0, logical reads 2538, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

Table ‘d’. Scan count 1, logical reads 11788768, physical reads 0, read-ahead reads 6, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

Parole de DBA, je n’ai modifié que le nom des tables.

Petit rappel sur la commande SET STATISTICS IO ON :

image

Cette capture (BOL SQL Server) nous indique que les reads sont exprimés en pages. Une page étant l’unité de stockage minimale pour les données d’une table. Chaque page pèse 8Kb, dont 96 octets d’entête pour stocker des informations système et 8060 octets pour les données. Cela implique que 1 mégaoctet (ou megabyte) contient 128 pages.

1.640.689.238 (plus impressionnant avec la notation US) : c’est donc le nombre de pages lues pour traiter cette requête, seulement pour la table b.

Sortons notre calculatrice : 1.640.689.238 / 128 = 12.817.884,671875 Mb, soit un peu plus de 12.8 Tb.

Oui quand même, ça commence à faire. Et dans le plan d’exécution, il s’agit d’un index seek !!! A titre de comparaison, la table d ne fait que 92 Gb d’IO disque. Ridicule !!!!

La présence des données en cache (logical reads plutôt que physical reads) s’explique par le fait que j’ai exécuté cette requête plusieurs fois.

Pour conclure, il apparait encore une fois que les IO disques font partie des principaux facteur de performance d’une base de données. Sur cette requête, c’est la RAM de mon serveur qui m’a sauvé … D’où l’importance de ce paramètre dans le choix de votre configuration matérielle.

A propos Christophe

Consultant SQL Server Formateur certifié Microsoft MVP SQL Server MCM SQL Server 2008
Cet article a été publié dans SQL Server. Ajoutez ce permalien à vos favoris.

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