SQL 2014 – Nouvelle DMV sys.dm_exec_query_profiles

Combien de fois, dans votre vie de DBA vous êtes vous posé la question : mais que fait donc cette requête ? Où en est–elle ? Est-ce que le processus avance ou bien est-il bloqué ? Combien de  temps encore avant la fin de la requête ? Combien de lignes ont été traitées ? Est-ce que je suis en train de lire des données ou bien este ce que j’ai commencé l’opération de jointure ou d’agrégation ?

La DMV sys.dm_exec_requests était une de vos fidèles alliée pour découvrir la vérité.

Par exemple, prenons le cas d’un simple SELECT count(*) FROM dbo.FactOnlineSales. Une table de la base ContosoRetailDW que j’ai légèrement gonflée pour atteindre près de 139 000 000 d’enregistrements.

image

Et cette requête a durée 45 secondes… Pourquoi ? Que dit dm_exec_requests ?

image

Un wait de type CXPACKET. Un “problème” de parallélisme donc … Effectivement, vu le nombre de lignes, il est possible de penser que le parallélisme est la cause …

Mais si on creuse légèrement à l’aide de sys.dm_os_waiting_tasks, on s’aperçoit alors que le Thread 0 attends (CXPACKET) que les 2 threads de la requête parallélisée terminent leurs IOs (PAGEIOLATCH).

image

Légèrement plus avancé, mais il reste une question fondamentale : suis-je au tout début du traitement de la requête et puis-je aller boire un café, ou bien celle ci est sur el point de se terminer ?

Un grand pas a été franchi avec la sortie de SQL Server 2014. Une petite DMV qui passe relativement inaperçue au vue des mastodontes que sont Hekaton, AlwaysON, BPE et autres top features.

Please, welcome sys.dm_exec_query_profiles

Voyons donc ce que renvoie cette DMV lors d’une requête qui dure un peu :

SELECT node_id,physical_operator_name, 
       SUM(row_count) row_count, 
	   SUM(estimate_row_count) AS estimate_row_count, 
	   CAST(SUM(row_count)*100 AS float)/SUM(estimate_row_count) As '% compete'
FROM sys.dm_exec_query_profiles 
WHERE session_id=56
GROUP BY node_id,physical_operator_name
ORDER BY node_id;

 

image

Cool non ?

Vous savez que vous êtes en plein Cluster Index Scan, que que vous avez lu x lignes sur les y (du plan estimé). Belle indication de progrès d’une requête non ?

Il existe quand même un prérequis, et de taille : SET STATISTICS XML ON (ou SET STATISTICS PROFILE ON). Mais on n’a rien sans rien …

Pour un plan de type comportant un Nested Loop, pour lequel l’exécution est quasi complète (1 seul enregistrement locked par une autre session) :

image

image

Fini donc la pause café prétextant que vous ne savez pas où en est la progression de la requête …

Happy profiling.

A propos Christophe

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

2 commentaires pour SQL 2014 – Nouvelle DMV sys.dm_exec_query_profiles

  1. Ping : Premier contact avec SQL Server 2016 | Christophe LAPORTE – Consultant SQL Server

  2. Ping : SQL Server 2016 – Live Query Statistics | Christophe LAPORTE – Consultant SQL Server

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