都内で働くSEの技術的なひとりごと / Technical soliloquy of System Engineer working in Tokyo

都内でサラリーマンやってます。SQL Server を中心とした (2023年からは Azure も。) マイクロソフト系(たまに、OSS系などマイクロソフト以外の技術も...)の技術的なことについて書いています。日々の仕事の中で、気になったことを技術要素関係なく気まぐれに選んでいるので記事内容は開発言語、インフラ等ばらばらです。なお、当ブログで発信、発言は私個人のものであり、所属する組織、企業、団体等とは何のかかわりもございません。ブログの内容もきちんと検証して使用してください。英語の勉強のため、英語の

SQL トレースについて説明してみた

 稼働中のシステムで、SQL トレースを取得しておくことで、障害発生時の調査に役立てることができます。SQL トレースは設定したインスタンスのバックグラウンドでトレースを取得することが可能です。取得できる情報は、SQL Server Profiler と同様です。トレースの生成・設定・起動・停止を行うには、下記の4つのストアドプロシージャを使用します。

  • sp_trace_create
    トレースファイルの定義を行います。
  • sp_trace_setevent
    トレースファイルで取得するイベントの定義を行います。
  • sp_trace_setfilter
    取得するイベントに対して、フィルター設定を行います。フィルターの詳しい説明は、ここを参照してください。
  • sp_trace_setstatus
    トレース処理の起動・停止および削除を行います。

 途中まで書いたのですが、よく見ると上記のストアドプロシージャは SQL Server 2012 で非推奨 ( 気付くの遅いですね... ) になっていますね。

f:id:koogucc11:20131006083620j:plain

 『代わりに拡張イベントを使用します。』という記載がありますね。ここに記載があります。色々変更されてますね。sp_trace_create は、下記の DDL 文で設定するようです。イベントの設定も同時にできるので、sp_trace_setevent の機能も包含しています。

CREATE EVENT SESSION test_session
ON SERVER
    ADD EVENT sqlos.async_io_requested,
    ADD EVENT sqlserver.lock_acquired
    ADD TARGET package0.etw_classic_sync_target 
        (SET default_etw_session_logfile_path = N'C:\demo\traces\sqletw.etl' )
    WITH (MAX_MEMORY=4MB, MAX_EVENT_SIZE=4MB);

 それ以外にも、GUI、オブジェクトエクスプローラー上で管理・参照可能になっていますね。下図のような画面です。

f:id:koogucc11:20131006091905j:plain

 色々と追加されていますね。この辺りは勉強しておかないといけないですね。