2025年12月6日土曜日

Profilerから特定のSQL実行プランの調査方法

来週必要になりそうなので操作メモ。
Profilerで実行プランを採取する設定、トレースファイル出力する形で採取開始。
所定のSQLを実行 トレースを停止する。
トレースファイルをダブルクリックしてSQL Profilerを起動し編集する。
トレースファイル設定時に5MByteでロールオーパする設定をしていたので、以下ダイアログがロールオーバー分表示される。全部[はい]を選択。
プロパティで表示する行、列を絞り込む
このダイアログで、タブ切り替えをして
この画面で、必要なイベント(行)、項目(列)を絞り込む
次に列フィルタで実行プランに特定のキーワードが入っているもののみに絞り込む。今回は「7067」のキーワードにしてみる。
またロールオーパファイルの指定があるので、すべて「はい」を選択。
絞り込まれたデータが意図通りか1つ内容確認をしてみる。
よければ、全行を選択しコピー(Ctrl+C)する。
excelに貼り付ける。
絞り込みの結果、ShowPlanイベントの場合、B列がtextDataとしていたので、内容はShowplanXMLとなっている。
このExcelを渡して解析してもらえばいいかな。xlsxなら、zip圧縮ファイルなのでテキストデータは効率よく圧縮してくれるはず。 この段階で、実行プランのビジュアル化は不要だと思うけど、必要な場合は、B列の1セルの内容をテキストエディタに貼り付けて、 拡張子を.sqlplan、文字コードをBOMつきUTF-8で保存すると、 その.sqlplanファイルをダブルクリックすれば、SSMSが立ち上がり実行プランをグラフィックで表示できる。
追記:上でProfilerの結果をExcelに貼り付けたが、実行プランはXMLなので実行プランでは文字数が33000文字を超えることはざらにある。 Excelの1つセルに入れられる文字の最大数は32,767文字なので、はみ出した文字は次の行の先頭セルに入れられてしまう。 これでは、1列目はイベント種類ということが言えなくなり、実行プランファイルを作るには、2つのセルの内容を連結して作らなければならない。 うまくいかないものですね。 Profilerで実行プランのイベントを抽出する設定をした場合に追加される以下の[イベント抽出の設定]タブでXMLプランを個別にファイルに出力した方がよさそう。 ただ、何十個の実行プランを1ファイルに保存すると、この.sqlplanファイルを開いたときにSSMSが固まるので、実行プランごとにファイルに分ける設定ができる。 この設定をすると(トレースファイルのロールオーバーのように)ファイル名の拡張子の前に_連番が付加される。 (下のダイアログでは、aa.sqlplan,aa_1.SQLPlan,aa_2.SQLPlan,...,aa_10.SQLPlan,...となる)

0 件のコメント: