拡張イベントについて少し気になったので、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
SQL Server 起動アカウントに Performance Log Users グループを追加します。ETW にアクセスするために必要です。(起動アカウントが Administrator などであれば必要ありません。)
CREATE EVENT SESSION test_session....の DDL 文を実行します。実行後、管理 → 拡張イベントに test_session が追加されます。
コマンドプロンプトを起動し、logman コマンドでイベントトレースの設定を行います。
logman start "NT Kernel Logger" /p "Windows Kernel Trace" (process,thread,disk) /o C:\demo\traces\sqletw.etl /ets
トレースを実行するため、下記の DDL 文を実行します。
ALTER EVENT SESSION test_session ON SERVER STATE = start
上記の DDL 文を実行すると、トレースが実行状態になります。
コマンドプロンプトを起動し、以下のコマンドを実行します。
logman query -ets
下図のようになっていることを確認します。
これで、拡張イベントの設定は完了です。まだまだ、詳細に調査する必要がありそうです。また、拡張イベントはウィザード形式で設定も可能なようです。次回取り上げたいと思います。