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

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

SQL Server の拡張イベントについて少ししらべてみた

 拡張イベントについて少し気になったので、MSDN を少しあさってみました。参考ページはここです。

 sp_trace* より、軽量になったのでしょうか? SQL トレースはそれなりに負荷がかかったような記憶があります。軽量になることは喜ばしいことです。

拡張イベントは軽量なパフォーマンス監視システムであり、使用されるパフォーマンス リソースはごくわずかです。 拡張イベントには、セッション データを容易かつ迅速に作成、変更、表示、および分析するためのグラフィカル ユーザー インターフェイスが 2 つ用意されています。

  ETW の概念を SQL Server 用に拡張しているんですね。ETW ( Event Tracing for Windows ) に関してはここを参照してください。

SQL Server 拡張イベントは、イベントやイベント コンシューマーなど、既存の概念を基にして、Event Tracing for Windows の概念や、新しい概念を導入したものです。

SQL トレースと違って、ツールで解析することができるので非常に便利になりそうです。

Management Studio または Transact-SQL を使用して Transact-SQL データ定義言語 (DDL) ステートメント、動的管理ビューおよび関数、カタログ ビューを実行することで、SQL Server 環境の簡単、または複雑な SQL Server 拡張イベント トラブルシューティング ソリューションを作成することができます。

  

 それでは、少し試してみましょう。まずは、 DDL 文を利用してトレースを取得してみましょう。まずは、トレースの作成です。

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);

 sqlos, sqlserver など EVENT、TARGET に指定するオブジェクトは下記の SQL 文でチェックすることが可能です。SQL Server Management Studio でインテリセンスが反応すると非常に使い勝手がいいのですが、残念ながら反応しません。( 2014 で可能になったりするのでしょうか?) EVENT、TARGET に指定可能なパッケージおよびオブジェクトは下記のクエリを実行することで確認可能です。

select b.name as パッケージ,
       a.name as オブジェクト,
	   a.description as オブジェクトの説明
from sys.dm_xe_objects a 
       inner join sys.dm_xe_packages b 
	       on a.package_guid = b.guid

f:id:koogucc11:20131006171714j:plain

 SQL Server 起動アカウントに Performance Log Users グループを追加します。ETW にアクセスするために必要です。(起動アカウントが Administrator などであれば必要ありません。)

f:id:koogucc11:20131006210524j:plain

 CREATE EVENT SESSION test_session....の DDL 文を実行します。実行後、管理 → 拡張イベントに test_session が追加されます。

f:id:koogucc11:20131006172056j:plain

 コマンドプロンプトを起動し、logman コマンドでイベントトレースの設定を行います。

logman start "NT Kernel Logger" /p "Windows Kernel Trace" (process,thread,disk) /o C:\demo\traces\sqletw.etl /ets

f:id:koogucc11:20131006210226j:plain

 トレースを実行するため、下記の DDL 文を実行します。

ALTER EVENT SESSION test_session ON SERVER
STATE = start

  上記の DDL 文を実行すると、トレースが実行状態になります。

f:id:koogucc11:20131006213032j:plain

 コマンドプロンプトを起動し、以下のコマンドを実行します。

logman query -ets

 下図のようになっていることを確認します。

f:id:koogucc11:20131006214205p:plain

 これで、拡張イベントの設定は完了です。まだまだ、詳細に調査する必要がありそうです。また、拡張イベントはウィザード形式で設定も可能なようです。次回取り上げたいと思います。