ストアドプロシージャの使用状況の追跡


19

SQL Server Profilerを使用する以外に、どのストアドプロシージャが使用されているか、少なくとも最後に実行されたときを追跡する方法はありますか?


4
プランキャッシュはいつでも確認できます。メタデータはすぐに大きくなり、高価になるため、SQL Serverはこのようなことを永遠に追跡しません。
-JNK

回答:


17

プランキャッシュを調べて、ストアドプロシージャの使用方法についてかなり良いアイデアを得ることができます。たとえば、次のクエリを使用します。

select
    db_name(st.dbid) as database_name,
    object_name(st.objectid) as name,
    p.size_in_bytes / 1024 as size_in_kb,
    p.usecounts,
    st.text
from sys.dm_exec_cached_plans p
cross apply sys.dm_exec_sql_text(p.plan_handle) st
where p.objtype = 'proc'
and st.dbid = db_id('SomeDatabase')
order by p.usecounts desc

これusecountsにより、キャッシュされているストアドプロシージャが取得できSomeDBます。

注:プランキャッシュには実行プランが含まれています。これらの計画の保持には、多くの要因が関係しています。 これにより、何が使用されているか、どのくらいの頻度であるかがわかりますが、ストアドプロシージャの実行中の合計や、それらが実行された頻度/時間ではありません。

プランキャッシュに関するBOLリファレンス


4
これは、spがかなり最近実行されたことを示しているだけで、ここにないprocについての情報はありません。四半期レポートの背後にあるprocsのようなものはまれにしか実行されませんが、使用されています。基本的に、これはデータベースにヒットするアプリケーションを調査するためのリストを提供するだけです。
HLGEM

1
@HLGEM正確に。私は答えでその点を明確にしようとしました。
トーマスストリンガー

特定の日時範囲でこれを行うことは可能ですか?(例:最終日/月など)?
ホセ・パーラ

このクエリは、変更され、その後実行されていないストアドプロシージャの行を返さないことに注意してください。
Axel2D

10

last_execution_timeすべてのストアドプロシージャの情報が含まれているだけでなく、これを見ることができます。

    SELECT DB_NAME(database_id)
    ,OBJECT_NAME(object_id,database_id)
    ,cached_time
    ,last_execution_time
    ,execution_count
FROM sys.dm_exec_procedure_stats

このカントーには注意が必要です。これらの統計は、最後のデータベース実行以降のみ保持されます。1日1回、テーブルにアーカイブするジョブの作成に忙しくしています。
earthling42

@ earthling42、毎日テーブルにアーカイブする仕事を書いたことがありますか?
アレックスチャン

@Alex Chung-残念ながら、それを回避することはできませんでした。この投稿の日付の直後に、非MS-SQLプロジェクトに移動しました。ハードトーになるべきではない?興味があれば、私はあなたと一緒にそれを解決しようとすることを嬉しく思います。
earthling42
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.