拡張イベントを使用してシステムの使用状況を監視する方法
この手順は、拡張イベントを Event Tracing for Windows (ETW) と共に使用してシステムの使用状況を監視する方法を示します。また、CREATE EVENT SESSION、ALTER EVENT SESSION、DROP EVENT SESSION の各ステートメントの使用方法についても説明します。
この作業には、SQL Server Management Studio のクエリ エディタを使用した次の手順の実行も含まれます。この手順では、コマンド プロンプトを使用して ETW コマンドを実行することも必要です。
拡張イベントを使用してシステムの使用状況を監視するには
クエリ エディタで次のステートメントを実行してイベント セッションを作成し、2 つのイベントを追加します。checkpoint_begin と checkpoint_end のイベントは、データベース チェックポイントの開始時と終了時に起動されます。
CREATE EVENT SESSION test0 ON SERVER ADD EVENT sqlserver.checkpoint_begin, ADD EVENT sqlserver.checkpoint_end WITH (MAX_DISPATCH_LATENCY = 1 SECONDS) go CREATE EVENT SESSION test0 ON SERVER ADD EVENT sqlserver.checkpoint_begin, ADD EVENT sqlserver.checkpoint_end WITH (MAX_DISPATCH_LATENCY = 1 SECONDS) go
32 バケットのバケット ターゲットを追加して、データベース ID に基づいたチェックポイントの数をカウントします。
ALTER EVENT SESSION test0 ON SERVER ADD TARGET package0.asynchronous_bucketizer ( SET slots = 32, filtering_event_name = 'sqlserver.checkpoint_end', source_type = 0, source = 'database_id' ) go ALTER EVENT SESSION test0 ON SERVER ADD TARGET package0.asynchronous_bucketizer ( SET slots = 32, filtering_event_name = 'sqlserver.checkpoint_end', source_type = 0, source = 'database_id' ) go
次のステートメントを実行して ETW ターゲットを追加します。こうすると開始イベントと終了イベントを表示できるので、これを使用してチェックポイントの所要時間を判断できます。
ALTER EVENT SESSION test0 ON SERVER ADD TARGET package0.etw_classic_sync_target go ALTER EVENT SESSION test0 ON SERVER ADD TARGET package0.etw_classic_sync_target go
次のステートメントを実行してセッションを開始し、イベント コレクションを開始します。
ALTER EVENT SESSION test0 ON SERVER STATE = start go ALTER EVENT SESSION test0 ON SERVER STATE = start go
次のステートメントを実行して 3 つのイベントを発生させます。
USE tempdb checkpoint go USE master checkpoint checkpoint go USE tempdb checkpoint go USE master checkpoint checkpoint go
次のステートメントを実行してイベント カウントを表示します。
SELECT CAST(xest.target_data AS xml) Bucketizer_Target_Data_in_XML FROM sys.dm_xe_session_targets xest JOIN sys.dm_xe_sessions xes ON xes.address = xest.event_session_address JOIN sys.server_event_sessions ses ON xes.name = ses.name WHERE xest.target_name = 'asynchronous_bucketizer' AND xes.name = 'test0' go SELECT CAST(xest.target_data AS xml) Bucketizer_Target_Data_in_XML FROM sys.dm_xe_session_targets xest JOIN sys.dm_xe_sessions xes ON xes.address = xest.event_session_address JOIN sys.server_event_sessions ses ON xes.name = ses.name WHERE xest.target_name = 'asynchronous_bucketizer' AND xes.name = 'test0' go
コマンド プロンプトで、次のコマンドを実行すると ETW のデータが表示されます。
注 tracerpt コマンドのヘルプを表示するには、コマンド プロンプトで「tracerpt /?」と入力します。
logman query -ets --- List the ETW sessions. This is optional. logman update XE_DEFAULT_ETW_SESSION -fd -ets --- Flush the ETW log. tracerpt %temp%\xeetw.etl -o xeetw.txt --- Dump the events so they can be seen. logman query -ets --- List the ETW sessions. This is optional. logman update XE_DEFAULT_ETW_SESSION -fd -ets --- Flush the ETW log. tracerpt %temp%\xeetw.etl -o xeetw.txt --- Dump the events so they can be seen.
次のステートメントを実行してイベント セッションを停止し、サーバーから削除します。
ALTER EVENT SESSION test0 ON SERVER STATE = STOP go DROP EVENT SESSION test0 ON SERVER go ALTER EVENT SESSION test0 ON SERVER STATE = STOP go DROP EVENT SESSION test0 ON SERVER go