Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

SQL Server : Comment mesure t’on la performance d’une requête ?

Sur un système de base de données relationnelle comme SQL Server, on vérifie la performance de la requête entre autres sur son influence sur l'environnement matériel du serveur. Il y a 4 facteurs matériels : le ou les disque(s), le ou les processeur(s), la ou les interface(s) réseau, la mémoire. Pour simplifier je ne parlerais pas de la concurrence d'accès aux données ici.

Pour la partie réseau, ses performances dépendent du nombre de champs (et de leur taille) et du nombres d'enregistrement renvoyés, ainsi que du fait qu'elle impacte des champs long ou non (qui contiennent une grande taille, tels que varchar(max) ou image entre autres).

La consommation de mémoire est plus une question de cache, plus on en a disposition, plus on limite la consommation disque.

Les 2 facteurs essentiels sont le disque et le processeur. Or SQL Server nous fournis 2 commandes permettant de mesurer précisément la consommation de ces 2 ressources.

SET STATISTICS IO ON
SET STATISTICS TIME ON
-- Ma requête ici
SET STATISTICS TIME OFF
SET STATISTICS IO OFF

Pensez bien à remettre ces options à OFF, elles sont en effet valables pour la connexion jusqu'à sa fermeture sinon toutes les commandes verront leur statistiques renvoyés par la suite.

Vous obtiendrez en message pour le temps CPU :

SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 1 ms.

SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 10 ms.

Le premier est le temps passé et le temps CPU nécessaire à la compilation de la requête, le second est celui nécessaire à l'exécution de la requête. Le premier n'apparait que si un plan d'exécution présent dans le cache n'a pas pu être réutilisé.

Au niveau des IO le message suivant vous est fourni :

Table 'Employee'. Scan count 0, logical reads 2, physical reads 2, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

On l'on trouve la liste des tables, le nombre de scan (de passage que le moteur a du effectuer sur la table), puis le nombre de lectures. Le nombre de lectures représente le nombre de pages lues, une page étant de taille fixe (8 ko). Les lectures logiques sont effectuées dans le cache (en mémoire), les lectures physiques sont quant à elle effectuées sur le disque. Le read-ahead charge par avance des pages en mémoire pour les futurs besoins de la requête. Sur SQL Server 2005 la référence aux lectures de LOB (Large Objects) est aussi indiquée.

Le total des pages « physical reads » + « read-ahead reads » représente le nombre de pages lues sur le disque, ce chiffre varie énormément d'une exécution de requête à l'autre. Il permet essentiellement d'apprécier l'utilisation du cache et donc si la mémoire disponible est suffisante.

En sachant tout cela, optimiser la requête revient à diminuer le nombre de pages lues par le moteur et le temps processeur consommé.

Bonne optimisation…

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Publié mardi 17 avril 2007 16:30 par christian
Classé sous : ,

Commentaires

mardi 17 avril 2007 21:54 by cyril

# re: SQL Server : Comment mesure t’on la performance d’une requête ?

C'est ce qui est utilisé par le profiler pour obtenir les infos ?

En parlant de SQL profiler si t'avais un petit tuto qui explique comment bien l'utiliser et le comprendre pour un developpeur ...

mardi 17 avril 2007 22:40 by christian

# re: SQL Server : Comment mesure t’on la performance d’une requête ?

C'est à peu près les même suivant que l'on trace les batchs ou les requêtes... SQL Profiler fournis aussi les écritures.

pour un tuto pourquoi pas, je mets çà sur la pile... Ca devrait être possible pour 2010 :o>

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Faire apparaitre l’onglet ‘Développeur’ dans Office 2010 par Julien Chable le il y a 18 heures et 22 minutes

- [Astuce] Patch pour Microsoft Forums NNTP Bridge V1 par Le petit blog de Pierre / Pierre's little blog le il y a 20 heures et 32 minutes

- Pb lors de l’installation SharePoint 2010… par Le blog de Patrick le 03-12-2010, 14:08

- [WF4] Ajouter des contraintes à une activité (2/2) par Blog de Jérémy Jeanson le 03-12-2010, 08:35

- [WF4] Ajouter des contraintes à une activité (1/2) par Blog de Jérémy Jeanson le 03-12-2010, 08:03

- [ASP.NET] Ne pas se faire avoir par IHttpModule et sa méthode Init() par Thomas Jaskula le 03-12-2010, 00:04

- [MSTD10] SharePoint 2010 et Team Foundation Server par Philippe Sentenac [MVP SharePoint] le 03-11-2010, 10:49

- [MSTD10] SQL Server 2008 pour les développeurs et Visual Studio Team System Database Edition par Michel Perfetti [Miiitch] le 03-11-2010, 10:00

- [WF4] Localiser simplement une activité et son designer WPF par Blog de Jérémy Jeanson le 03-11-2010, 08:49

- [Techdays 2010] Webcasts et Slides par Blog Technique d'Audrey PETIT le 03-11-2010, 08:30