2026年4月24日金曜日

SQL Server トレースと拡張イベントの使い方|パフォーマンス分析と障害調査の基本

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の基本手順

  1. SSMSメニューから [ツール] → [SQL Server Profiler] を起動
  2. サーバーに接続し、テンプレート(例:TSQL_Replay)を選択
  3. キャプチャ対象イベントを指定してトレース開始
  4. 必要な情報が取得できたら停止・保存

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)での作成手順

  1. SSMSで「管理」→「拡張イベント」→「セッション」を右クリック
  2. [新しいセッション] を選択
  3. イベント(例:sql_statement_completed)を追加
  4. ターゲットに「イベントファイル」または「リングバッファ」を指定
  5. 必要に応じてフィルタ条件(アプリ名・ログイン名など)を設定

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 は従来のトレース手法、拡張イベントは後継の軽量方式。
  • 拡張イベントは非同期処理でサーバー負荷が小さい。
  • セッション単位で柔軟にイベント収集が可能。
  • 本番環境では拡張イベントへの移行が推奨。
SQL Server学習シリーズ
◀ 【第5回】エラーログとトレースフラグの基礎
【第7回】サーバー設定と構成管理(sp_configure) ▶
目次へ

参考リンク

SQL Server 解説用イメージ

0 件のコメント:

コメントを投稿