Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Atteint de JavaScriptite Aiguë [Cyril Durand]

Expert ASP.net Ajax et WCF, Cyril Durand parle dans son blog de point techniques sur ASP.net, ASP.net Ajax, JavaScript, WCF et .net en général. Cyril est également consultant indépendant, n'hésitez pas à le contacter pour de l'assistance sur vos projets

Actualités

  • Blog de Cyril DURAND, passionné de JavaScript, Ajax, ASP.net et tout ce qui touche au developpement Web Client-Side.

    N'hésitez pas à me contacter pour vos projets .net : architecture, accompagnement, formation, ...

    View Cyril Durand's profile on LinkedIn
    hit counters


    Expertise Commerce server et BizTalk

Comment obtenir les indicateurs de performances d’une requête SQL avec SQL Server ?

Lorsque l’on réalise une application qui utilise un serveur de base de donnée, il est toujours intéressant de regarder quelles sont les performances des requêtes SQL que notre application exécute.

Il y a plusieurs solutions pour arriver à ces fins.

La première, la plus connue, est d’utiliser SQL Server Profiler. Il s’agit d’un outil qui va analyser tout ce qui transite sur le serveur SQL.

Lorsque vous lancez l’outil, il va d’abord vous demander de vous connecter sur un serveur SQL, puis, il va vous demander un template. Un template est un ensemble de règle qui permet de tracer seulement certains événements. Je trouve que le template par défaut log trop de choses et qu’il manque certaines données importantes.

Pour ma part, je ne logge que ces informations :

image

J’ai rajouté la colonne “RowCounts” qui permet de savoir le nombre de ligne retourné par la requête, et supprimé les événements “RPC:Starting” et “SQL:BatchStarting” qui surgisse dès le début de la requête, avant même que SQL ait commencé l’analyse.

Ensuite, après avoir configuré la trace, vous allez voir apparaitre les différentes requêtes qui sont jouées sur votre serveur.

image

Les colonnes intéressantes sont les colonnes :

  • CPU : nombre d’unité de CPU consommé (unité arbitraire)
  • Reads : nombre de pages lues
  • Writes : nombre de pages écrites
  • Duration : durée d’éxécution en ms
  • RowCounts : nombre de ligne retourné par la requête

Il est également possible de mettre des flags au niveau de votre session SQL Server, ainsi pour chaque batch de votre session, vous aurez le détail des accès disques et durée d’exécution. Les flags à spécifier sont les flags suivants :

set statistics io on 
set statistics time on 

select * 
from magelia.Address 
where Name = 'home'

Au niveau des messages vous obtiendrez alors :

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

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

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

(8142 row(s) affected)
Table 'Address'. Scan count 1, logical reads 2775, physical reads 0, read-ahead reads 0, lob logical reads 5496, lob physical reads 0, lob read-ahead reads 5242.

 SQL Server Execution Times:
   CPU time = 78 ms,  elapsed time = 778 ms.

 SQL Server Execution Times:
   CPU time = 78 ms,  elapsed time = 778 ms.

Ne vous focalisez pas sur le temps d’exécution ! Lorsque vous êtes tous seul sur votre base de données, le disque dur est peu sollicité, les durées d’exécution seront globalement bonnes. Par contre, focalisez-vous sur le nombre de pages lues : ce qui est couteux sur un serveur SQL est les accès disques. Il est donc préférable d’avoir une requête qui consomme très peu de pages lues plutôt qu’une requête un peu plus rapide qui consomme beaucoup plus de pages lues.

Et vous qu’utilisez-vous pour connaitre les performances des requêtes SQL que vous écrivez ?

Posted: lundi 9 janvier 2012 20:14 par cyril
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 :

Commentaires

Aurelien a dit :

Pour de la performance sur une requête, j'utilise le même procédé.

Pour une vue d'ensemble sur les bottleneck, je préfère SQLNexus (http://sqlnexus.codeplex.com/)

# janvier 10, 2012 11:26
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Nouveau blog en anglais / New blog in english ! par Le blog de Patrick [MVP SharePoint] le 09-18-2014, 18:42

- [ #Yammer ] From Mailbox to Yammer and back / De votre messagerie vers Yammer et retour ! par Le blog de Patrick [MVP SharePoint] le 09-15-2014, 11:31

- [ #Office 365 ] New service settings panel / Nouveau panneau de paramétrage des services par Le blog de Patrick [MVP SharePoint] le 09-11-2014, 08:50

- Problème de déploiement pour une démo SharePoint/TFS? par Blog de Jérémy Jeanson le 09-10-2014, 21:52

- [ #Office365 ] Delve first impressions / Premières impressions sur Delve par Le blog de Patrick [MVP SharePoint] le 09-09-2014, 16:57

- [ #Office365 ] How to change Administration console language ? / Comment changer la langue de la console d’administration ? par Le blog de Patrick [MVP SharePoint] le 09-09-2014, 08:25

- [ #SharePoint 2013 ] Suppression de bases de données en état “Pas de Réponse” par Le blog de Patrick [MVP SharePoint] le 09-04-2014, 14:10

- Changer l’adresse d’une ferme Office Web Apps associée à SharePoint par Blog de Jérémy Jeanson le 09-01-2014, 22:21

- Une ferme #SharePoint 2013 dans @Azure en quelques clics (1ère partie) ! par Le blog de Patrick [MVP SharePoint] le 08-28-2014, 18:52

- SharePoint 2013: Préparation de la migration - Création des site Templates dans 2010 et 2013 par Blog Technique de Romelard Fabrice le 08-20-2014, 16:31