SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

拡張イベントを使用した待ち時間の多いクエリの取得

leave a comment

SQL Server で実行時に待ち時間の多いクエリを取得する場合、プロファイラや SQL Trace で Duration の多いクエリを取得することがあると思います。
image

SQL Server 2012 は拡張イベントを SSMS から設定できるようになっており、この拡張イベントを使用することでも待ち時間の多いクエリを取得することができます。

今回の投稿では拡張イベントを使用した待ち時間の多いクエリの取得についてまとめていきたいと思います。

■拡張イベントを使用した待ち時間の多いクエリの取得


SQL Server 2012 + SQL Server 2012 の SSMS を使用する場合、SSMS から拡張イベントを設定することができます。

SQL Server Profiler で待ち時間の多いクエリを取得する場合 [SQL:BatchCompleted] 等の項目を使用すると思いますが、拡張イベントでも対応したイベントが準備されています。

SQL Server Profiler 拡張イベント
SQL:StmtCompleted sql_statement_completed
SQL:BatchCompleted sql_batch_completed
SP:StmtCompleted sp_statement_completed

これらのイベントを使用することで拡張イベントからも待ち時間の多いクエリを取得することができます。

拡張イベントもフィルターをすることができ、duration を使用して特定の時間を経過したクエリのみを抽出することができます。
SQL Server Profiler の duration はミリ秒でしたが拡張イベントの duration はマイクロ秒で指定をします。
# 以下の画像は 5 秒の待ちとなっています。
image

拡張イベントはメモリに格納する ring_buffer (円環状のメモリバッファ) とファイルに格納する event_file 等を使用することができます。

対象のデータストレージを選択して、[ターゲット データの表示] をクリックすることで、データを表示することができます。
image

ファイルの [開く] または [拡張イベント ファイルの結合] からも拡張イベントとして取得した内容を開くことができます。
image

拡張イベントは SQL Serve Profiler と比較して取得できるイベントやフィールドが多いです。
また、グループ化 / 集計という操作もできますので情報を整理しやすくなっています。

SQL Trace と拡張イベントを比較すると拡張イベントの方が軽量らしいので、今後はこちらを使って状態を取得する機会が多くなってくるのかなと思います。

Share

Written by Masayuki.Ozawa

4月 18th, 2012 at 11:34 pm

Posted in SQL Server

Tagged with ,

Leave a Reply