SQL Serverの動作を可視化!トレースと拡張イベントで行う性能分析と障害調査の基本
SQL Serverの運用では、「処理が遅い」「エラーが発生した」などの問題を特定するために、
サーバー内部で何が起きているかを把握する必要があります。
その際に活用できるのがトレース(SQL Trace / Profiler)と、
その後継である拡張イベント(Extended Events)です。
この記事では、両者の違いと設定方法、実務での使い分け方をわかりやすく解説します。
目次
SQL Serverの監視機能「トレース」と「拡張イベント」とは?
SQL Traceとは
SQL Traceは、SQL Serverの内部処理をリアルタイムで記録する監視機能です。 SQL Server Profiler(GUIツール)を使って操作し、実行中のSQL文・ログイン・ロック・エラーなどを取得できます。
拡張イベント(Extended Events)とは
拡張イベント(XEvent)は、SQL Traceの後継として導入された軽量な監視機構です。 CPUやメモリへの負荷を抑えつつ、詳細な情報を取得できます。 SQL Server 2012以降は、Profilerよりも拡張イベントが推奨されています。
SQL Trace / Profilerの概要と使い方
SQL Server Profilerとは
SQL Server Profilerは、SQL TraceをGUIで操作できるツールです。 主に以下のような調査で利用されます:
- 実行されているSQLクエリの内容を確認
- ボトルネック(遅いクエリ)の特定
- デッドロックやエラー発生の原因分析
Profilerの基本手順
- SSMSメニューから [ツール] → [SQL Server Profiler] を起動
- サーバーに接続し、テンプレート(例:TSQL_Replay)を選択
- キャプチャ対象イベントを指定してトレース開始
- 必要な情報が取得できたら停止・保存
T-SQLでトレースを開始する例
EXEC sp_trace_create @traceid OUTPUT, 0, N'C:\Trace\mytrace.trc';
EXEC sp_trace_setevent @traceid, 10, 1, 1; -- RPC:Completed
EXEC sp_trace_setstatus @traceid, 1; -- トレース開始
ただし、SQL Traceは将来的に廃止予定であり、 今後は拡張イベントへの移行が推奨されます。
拡張イベント(Extended Events)の基本構成
構成要素
拡張イベントは、以下の3要素で構成されます。
| 要素 | 説明 |
|---|---|
| イベント(Event) | 監視対象(例:SQL実行、デッドロック発生など) |
| ターゲット(Target) | 取得結果の出力先(リングバッファ、ファイルなど) |
| アクション(Action) | 追加で記録する項目(例:セッションID、ユーザー名) |
軽量で柔軟な構成
拡張イベントは内部的に非同期処理で動作するため、 トレースよりもサーバー負荷が少なく、常時稼働の監視にも適しています。
拡張イベントセッションの作成と管理
GUI(SSMS)での作成手順
- SSMSで「管理」→「拡張イベント」→「セッション」を右クリック
- [新しいセッション] を選択
- イベント(例:sql_statement_completed)を追加
- ターゲットに「イベントファイル」または「リングバッファ」を指定
- 必要に応じてフィルタ条件(アプリ名・ログイン名など)を設定
T-SQLでの作成例
CREATE EVENT SESSION Monitor_SQL
ON SERVER
ADD EVENT sqlserver.sql_statement_completed
(
ACTION (sqlserver.session_id, sqlserver.client_app_name)
WHERE (duration > 1000)
)
ADD TARGET package0.event_file
(
SET filename = N'C:\XE\Monitor_SQL.xel'
);
GO
ALTER EVENT SESSION Monitor_SQL ON SERVER STATE = START;
この設定では、実行時間が1秒を超えるSQL文をキャプチャしてファイル出力します。
結果の確認
SELECT event_data = CONVERT(XML, event_data)
FROM sys.fn_xe_file_target_read_file('C:\XE\Monitor_SQL*.xel', NULL, NULL, NULL);
SSMSの「拡張イベントビューア」を使えば、GUIでも結果を確認できます。
トレースと拡張イベントの比較と実務での選び方
比較表
| 項目 | SQL Trace / Profiler | 拡張イベント |
|---|---|---|
| 導入時期 | 旧来の仕組み(SQL2000〜) | SQL2008以降の新方式 |
| 負荷 | 高め(同期処理) | 低い(非同期処理) |
| 設定柔軟性 | 限定的(固定イベント中心) | 高い(条件・出力先・アクションを自由指定) |
| 運用推奨 | 短期的調査・デバッグ向き | 本番監視・継続運用向き |
実務での使い分け
- 開発・検証環境: SQL Profilerでリアルタイムにクエリ確認
- 本番・長期監視: 拡張イベントで負荷を抑えてログ収集
- 障害発生時: 拡張イベントで再現性の低い問題を追跡
Microsoftも今後は拡張イベントの利用を推奨しており、Profilerは非推奨(deprecated)です。
まとめと次のステップ
学んだ内容の整理
- SQL Trace / Profiler は従来のトレース手法、拡張イベントは後継の軽量方式。
- 拡張イベントは非同期処理でサーバー負荷が小さい。
- セッション単位で柔軟にイベント収集が可能。
- 本番環境では拡張イベントへの移行が推奨。
参考リンク

0 件のコメント:
コメントを投稿