web-dev-qa-db-fra.com

Comprendre sys.dm_exec_query_stats exécutant_count vs creation_time

Je viens de télécharger le serveur SQL Server 2012 "Rapports de tableau de bord de performance ' et j'ai des problèmes interprétant les données présentées par l'un des résultats et le relie à la DMV sys.dm_exec_query_stats.

Selon le rapport de la CPU, ma pire requête est une instruction insertion qui a couru ~ 27k Times.

Quand je prends le query_hash Pour la requête et placez-la dans la requête ci-dessous, j'obtiens 62 résultats, chacun avec le même query_hash et query_plan_hash mais avec différents plan_handle valeurs.

SELECT * FROM sys.dm_exec_query_stats AS deqs
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS dest
WHERE query_hash = 0x1561B563078359C1

Selon [~ # ~] bol [~ # ~ ~] , le execution_count spectacles:

Nombre de fois que le plan a été exécuté depuis sa dernière compilation.

et creation_time spectacles

Temps auquel le plan a été compilé.

Je suis à 99,9% sûr que la requête fonctionne une fois toutes les 5 minutes, mais chaque requête dans le jeu de résultats a un plan creation_time de ce matin et pourtant execution_count montre ~ 400 pour chacun.

Comment SQL Server détermine-t-il cette figure? Sont les figures en quelque sorte liées par plan_hash ou sont-ils uniques pour chaque plan_handle?

5
Mark Sinkinson

sys.dm_exec_query_stats renvoie des statistiques agrégées pour les plans, mais avec une ligne par requête.

Donc, si une procédure a 2 requêtes, alors sys.dm_exec_query_stats Retournerait 2 lignes, mais les colonnes liées au plan (telles que la compilation, le nombre d'exécution, etc.) sont des statistiques de niveau de plan, et ne peuvent pas être encore agrégées.

5
Kev Riley