août
2010
Généralement le temps CPU et le nombre de pages logiques lues sont les indicateurs de performance d’une requête.
Pour obtenir les valeurs de ces indicateurs SQL Server met à disposition les commandes :
SET STATISTICS TIME ON
Ces commandes fournissent beaucoup d’informations et donc engendrent des fois une perte de temps. Par exemple si on travaille sous SSMS (SQL Server Management Studio), les résultats de la requête sont présentés dans l’onglet « Résultats » et les indicateurs de performances dans l’onglet « Messages ». Et il y en a un paquet alors que la plupart du temps c’est le nombre de pages logiques lues qui est l’indicateur le plus fiable car le temps CPU varie de façon aléatoire pour une même requête et pour une même base dont l’état n’a pas changé !
—————————————————————————————————————————–
— Description : Indicateurs de performance d’une requête : Temps CPU et le nombre de pages logiques lues
— Auteur : Etienne ZINZINDOHOUE
—————————————————————————————————————————–
--> 1. Initialisation des indicateurs
DECLARE @cpu_time_Debut int
DECLARE @logical_reads_Debut int
SELECT @cpu_time_Debut = cpu_time -- Temps CPU (en millisecondes) utilisé
, @logical_reads_Debut = logical_reads -- Nombre de lectures logiques effectuées
FROM sys.dm_exec_requests
WHERE session_id = @@spid
--> 2. Mettre ici la requête à mesurer
--> 3. Obtenir les valeurs des indicateurs
SELECT cpu_time - @cpu_time_Debut AS [Temps CPU (en ms)]
, logical_reads - @logical_reads_Debut AS [Pages logiques lues]
FROM sys.dm_exec_requests
WHERE session_id = @@spid ;
============================
EXEMPLE
============================
--> 1. Initialisation des indicateurs
DECLARE @cpu_time_Debut int
DECLARE @logical_reads_Debut int
SELECT @cpu_time_Debut = cpu_time -- Temps CPU (en millisecondes) utilisé
, @logical_reads_Debut = logical_reads -- Nombre de lectures logiques effectuées
FROM sys.dm_exec_requests
WHERE session_id = @@spid
--> 2. Mettre ici la requête à mesurer
USE AdventureWorks
SELECT TOP(5) LastName
FROM Person.Contact
WHERE LastName LIKE 'A%';
--> 3. Obtenir les valeurs des indicateurs
SELECT cpu_time - @cpu_time_Debut AS [Temps CPU (en ms)]
, logical_reads - @logical_reads_Debut AS [Pages logiques lues]
FROM sys.dm_exec_requests
WHERE session_id = @@spid ;
============================
RESULTAT
============================
Temps CPU (en ms) Pages logiques lues
0 4
Remarques :
1.) Le temps CPU varie de façon aléatoire pour une même requête et pour une base dont l’état n’a pas changé. Personnellement j’utilise désormais comme indicateur de performance d’une requête, le nombre de pages lues. car le temps CPU n’est pas fiable !
2.)
— Le comportement d’une requête dépend de plusieurs facteurs :
* matériels : disques – processeurs – mémoires
* Réseau : Qualité du réseau
* Utilisateurs : Nombre d’utilisateurs – Taille des données manipulées – Concurrence d’accès aux données
Les indicateurs de performances d’une requête dépendent donc de l’environnement dans lequel s’exécute cette requête.
—————————————————————————————————————————–
— Description : Indicateurs de performance d’une requête : Temps CPU et le nombre de pages logiques lues
— Auteur : Etienne ZINZINDOHOUE
—————————————————————————————————————————–