web-dev-qa-db-fra.com

Comment puis-je surveiller le nombre d'appels par procédure stockée par tispan?

Afin de diagnostiquer des problèmes de performance, je voudrais mieux comprendre le nombre de fois que certaines procédures sont appelées par rapport à la performance du système. Existe-t-il un moyen d'obtenir le nombre de fois que chaque procédure a été appelée pendant une certaine période?

10
olle

Vous pouvez obtenir ceci (et plus) à partir de Vues de gestion dynamiques (DMVS). Pour obtenir des statistiques pour une procédure stockée particulière, essayez la requête suivante.

SELECT
    OBJECT_NAME(qt.objectid)
  , qs.execution_count AS [Execution Count]
  , qs.execution_count / DATEDIFF(Second, qs.creation_time, GETDATE()) AS [Calls/Second]
  , qs.total_worker_time / qs.execution_count AS [AvgWorkerTime]
  , qs.total_worker_time AS [TotalWorkerTime]
  , qs.total_elapsed_time / qs.execution_count AS [AvgElapsedTime]
  , qs.max_logical_reads
  , qs.max_logical_writes
  , qs.total_physical_reads
  , DATEDIFF(Minute, qs.creation_time, GETDATE()) AS [Age in Cache]
FROM
    sys.dm_exec_query_stats AS qs
CROSS APPLY 
    sys.dm_exec_sql_text(qs.[sql_handle]) AS qt
WHERE
    qt.[dbid] = DB_ID()
AND qt.objectid = OBJECT_ID('StoredProcedureName')
OPTION (RECOMPILE);

Pour regarder les procédures les plus fréquemment exécutées:

SELECT
    OBJECT_NAME(qt.objectid)
  , qs.execution_count AS [Execution Count]
  , qs.execution_count / DATEDIFF(Second, qs.creation_time, GETDATE()) AS [Calls/Second]
  , qs.total_worker_time / qs.execution_count AS [AvgWorkerTime]
  , qs.total_worker_time AS [TotalWorkerTime]
  , qs.total_elapsed_time / qs.execution_count AS [AvgElapsedTime]
  , qs.max_logical_reads
  , qs.max_logical_writes
  , qs.total_physical_reads
  , DATEDIFF(Minute, qs.creation_time, GETDATE()) AS [Age in Cache]
FROM
    sys.dm_exec_query_stats AS qs
CROSS APPLY 
    sys.dm_exec_sql_text(qs.[sql_handle]) AS qt
WHERE
    qt.[dbid] = DB_ID()
ORDER BY
    qs.execution_count DESC
OPTION (RECOMPILE);

Les valeurs signalées sont cumulatives depuis le dernier redémarrage. Si vous souhaitez mesurer sur une période déterminée, utilisez la commande ci-dessous pour réinitialiser les statistiques d'attente.

DBCC SQLPERF("sys.dm_os_wait_stats",CLEAR);

Si vous vouliez mesurer les températures fixes au cours de la journée, vous pouvez alimenter la sortie de la requête à une table via un travail d'agent et a) Calculez les valeurs entre deux exécutions ou B) émettre la réinitialisation des statistiques d'attente comme la dernière étape du travail de l'agent. .

Alternativement, capturer une trace de profileur et exécuter-la à travers trace claire .

17