ストアドプロシージャごとのタイムスパンごとの呼び出し数を監視するにはどうすればよいですか?


10

パフォーマンスの問題を診断するために、システムパフォーマンスと比較して、特定のプロシージャが呼び出される回数をよりよく理解したいと思います。特定の期間中に各プロシージャが呼び出された回数を取得する方法はありますか?

回答:


17

これ(およびその他)は、動的管理ビュー(DMV)から取得できます。特定のストアドプロシージャの統計情報を取得するには、次のクエリを試してください。

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);

最も頻繁に実行されるプロシージャを確認するには:

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);

報告される値は、最後の再起動以降の累積です。一定期間測定したい場合は、以下のコマンドで待ち統計をリセットしてください。

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

1日の固定タイムスパンを測定する場合は、エージェントジョブを介してクエリ出力をテーブルにフィードし、a)2つの実行間の値を計算するか、b)エージェントジョブの最後のステップとして待機統計リセットを発行します。 。

または、プロファイラートレースをキャプチャし、それをClear Traceで実行します。


多対多の結果セットを取得しているようですが、正確ではありません。たとえば、object_nameレスポンス列の下に同じオブジェクトがいくつか表示されますが、詳細はほとんど同じですが、いくつか例外があります。一致する列の詳細:ExecutionCount、Call / Second、AgeInCache。一致しない列の詳細:AvgWorkerTime、TotalWorkerTime、AvgElapesedTime。多対多の結果の原因は何ですか?
kstubs 2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.