web-dev-qa-db-ja.com

SQL 2008のsp_cursorexecuteの基礎となるクエリと実行プランを表示する

Dynamics AXアプリケーションのパフォーマンスチューニングを行っており、SQLトレースでexec sp_cursorexecute 1073742882 ...という形式の長時間実行されている高I/Oクエリを確認します。新しいSQL Management Studioウィンドウでそのクエリを実行すると、エラーが発生しますCould not find prepared statement with handle 1073742882.わかりませんが、キャッシュされたプランは接続固有のもののようです。トレースにsp_cursorprepareがありません。ユースケースを繰り返すと、新しいカーソルで同じ準備済みハンドルIDが表示されます。これは私が接続している共有環境なので、アプリサーバーをリセットして、起動をトレースして確認する必要があると思います。

  • カーソルの準備されたハンドルIDを使用して、基になるクエリを確認する方法はありますか?
  • dm_exec_cached_plansの行をこのカーソルに関連付ける方法はありますか?
  • dm_exec_query_planまたはその他の方法で実行プランを確認する方法はありますか?
5

SQL2000以降、つまりDMVより前の日から、カーソルのアクティビティを追跡する必要はありませんでした。古い方法はまだ実行可能であり、プロファイラーを使用して、実行計画をトレースに含めます。

プランがsp_cursorexecute呼び出しに含まれるかどうか、またはトレースに戻ってハンドルに関連付けられたsp_cursorprepexecまたはsp_cursorprepareイベントを見つける必要があるかどうか、私は思い出せません。

2