SQL Process Explorer

Pour moi, sous Windows, l’application la plus importante à toujours été (de loin) Process Explorer de Mark Russinovich, alors quand j’ai commencer a remplir des fonctions de DBA un programme similaire m’a immédiatement manqué pour superviser SQL Server.

Comme j’ai été un développeur (depuis le ZX81 il y a quelques années ;) ) avant de devenir DBA j’ai fini par décider de faire un moi même une application de monitoring pour SQL Server. Et puisque j’ai toujours été reconnaissant à Mark pour la gratuité (et la qualité) de son travail, c’est maintenant mon tour d’offrir mon programme à ceux qui le voudront :

Le programme ne nécessite pas d’installation (comme procexp), c’est un simple executable .NET Framework 3.5 Client profile x86 (~400 Ko) :

Télécharger la dernière version (V1.0) exe & zip
Historique des versions

Il peut donc être lancer de n’importe quel répertoire (dans lequel il va générer un fichier .config pour enregistrer vos paramètres).

Le mode de capture principal est basé sur sys.sysprocesses, sys.dm_exec_requests et sys.dm_exec_sessions et double cliquer sur une ligne de la liste bascule sur l’onglet « Query » pour visualiser la requête et la ré-exécuter si besoin :

QuerySample

Les plus hauts niveaux de CPU, logical read, physical read, write, Wait time, Signal wait et 2 liste de wait configurable sont historisés. En passant la souris sur les histograms on obtient les informations de cette période avec la requête SQL qui était exécuté à ce moment par le process le plus consommateur du compteur concerné :

PopStatem

Il est donc simple de voir ce qu’il se passe en temps réel sur une instance, ou à un n’importe quel moment passé enregistré.

Les 2 listes de waits configurables sont par défaut (le titre se trouve avant les ‘:’ et les waits surveillés sont séparés avec des ‘;’ ensuite) :

IOWait:WRITELOG;IO_COMPLETION;PAGEIOLATCH_DT;PAGEIOLATCH_EX;PAGEIOLATCH_KP;PAGEIOLATCH_SH;PAGEIOLATCH_UP;ASYNC_IO_COMPLETION;

CXPacket:CXPACKET

J’ai ajouté un mode de capture expérimental basé sur la vue sys.dm_exec_query_stats (group by query_hash). Ce mode est accessible dans le menu option :

MenuDmQueryStats

Dans ce mode, vous pouvez voir en violet les requêtes exécutées en parallèle, avec un elapsed time inférieur au worker time (pas une méthode parfaite je dois admettre).

Voilà, après cette petite introduction il ne vous reste plus qu’a l’expérimenter par vous même, en espérant que ça vous sera aussi utile qu’a moi. Si vous avez des idées je suis ouvert à toutes les propositions d’amélioration et si vous trouvez des bugs vous pouvez les signaler dans les commentaires de cette page ou par mail : sqlprocexp@gmail.com

 

Publicités

SQL Process Explorer

For me, under Windows, the most important application has always been (by far) Process Explorer by Mark Russinovich, so when I started to assume DBA functions a similar program immediately missed me to monitor SQL Server.

As I was a developer (starting with the ZX81 a few years ago ;) ) before becoming DBA, I finally decided to make one myself. And since I’ve always been so thankful to Mark for his work (of such a quality) to be free, it is now my turn to offer freely my monitoring application for SQL Server to anyone who wants :

SQLProcexpApp

It doesn’t need any installation (as procexp), it’s a simple standalone .NET executable file Framework 3.5 Client profile x86 (~400 Ko) :

Download latest version (V1.0) exe & zip
Version history

So it can be launch from any directory (in witch it will generate a .config file to save your parameters).

The main capture mode is based on sys.sysprocesses, sys.dm_exec_requests, and sys.dm_exec_sessions. Double-clicking on a row in the list show the « Query » tab to review the query and re-run if necessary:

QuerySample

The highest level of CPU, logical read, physical read, write, Wait Time, Signal wait, and 2 users configurables list of waits are historized and by passing the mouse over the histograms we obtain the information of this period with the SQL query that was executed at that time by the most consuming process of the counter concerned:

PopStatem

It’s then simple to see what is currently happening on the instance, or at any time recorded in the past.

The default user configurable waits are (before ‘:’ is the title of the wait and after separate with ‘;’ are the monitored waits) :

IOWait:WRITELOG;IO_COMPLETION;PAGEIOLATCH_DT;PAGEIOLATCH_EX;PAGEIOLATCH_KP;PAGEIOLATCH_SH;PAGEIOLATCH_UP;ASYNC_IO_COMPLETION;

CXPacket:CXPACKET

I’ve added an experimental capture mode based on the sys.dm_exec_query_stats view (group by query_hash). This mode is accessible in the option menu:

In this mode you can see in purple the query executed in parallel, with elapsed time lower than worker time (not a perfect method I must admit).

Here we are, after this quick introduction you should now experiment it by yourself, hoping that it will be as useful to you as it is to me. If you have ideas I am open to all suggestions for improvement and if you find bugs you can post them in the comments of this page or by mail : sqlprocexp@gmail.com