web-dev-qa-db-ja.com

特定のストアドプロシージャのsys.dm_exec_procedure_statsに行がありません

ストアドプロシージャの統計を取得するためにDMVクエリを実行していますが、これに対して行が見つかりませんSP under sys.dm_exec_procedure_stats

ストアドプロシージャが複数回実行されたことがわかるので、これにはさまざまな理由が考えられます。

2

Dm_exec_procedure_statsビューに表示されないストアドプロシージャで同様の問題が発生しました。 「WITH RECOMPILE」句がなく、PROCEDUREを再度ドロップして作成しようとしました。新しいobject_idが、dm_exec_procedure_statsビューにまだありません。

SPは#一時テーブルを使用しており、実際には一時テーブルにいくつかの列を追加するALTER TABLEステートメントもありました。

一時テーブルが最初にすべての列で作成されるように変更しました、そしてVIOLA ... dm_exec_procedure_statsビューに表示されました:)

したがって、実行時にオブジェクトを変更する私のアプローチが、実行計画が不可能である理由だと思います。わからないがそれはうまくいった:)

2
Ronnie Petersen

このDMVを使用すると、ストアドプロシージャのメトリックを返すことができますが、ストアドプロシージャを名前で直接識別することはありません。代わりに、DMVは各ストアドプロシージャのobject_idとdatabase_idのみを識別します。したがって、パフォーマンスの数値が属する実際のストアドプロシージャ名を識別するには、このDMVの出力を、適切なデータベース、またはいくつかのメタデータ関数を使用

したがって、統計情報を取得するには、sys.dm_exec_query_statsを質問で述べたものと一緒に使用することを検討する必要があります。

また、

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

SELECT DB_NAME(st.dbid) DBName
      ,OBJECT_SCHEMA_NAME(st.objectid,dbid) SchemaName
      ,OBJECT_NAME(st.objectid,dbid) StoredProcedure
      ,max(cp.usecounts) Execution_count
 FROM sys.dm_exec_cached_plans cp
         CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle) st
 where DB_NAME(st.dbid) is not null and cp.objtype = 'proc'
   group by cp.plan_handle, DB_NAME(st.dbid),
            OBJECT_SCHEMA_NAME(objectid,st.dbid), 
   OBJECT_NAME(objectid,st.dbid) 
 order by max(cp.usecounts)

ストアドプロシージャのメトリックを分析できるさまざまなクエリがあります。 ストアドプロシージャの使用状況の監視

また、 こちら を読んでください

1
KASQLDBA