SQL トレースの ETW への対応について で ETW のスクリプト生成に対応してほしいなぁという記事を書いていました。ETW って SQL Server Management Studio から生成できるんですね。( 知りませんでした。) むぅ、勉強が足りなさすぎますね。ちょっと試してみましょう。Management → Session → New Session Wizard をクリックします。
Session name を入力して、NEXT をクリックします。
NEXT をクリックします。
イベントを選択し、NEXT をクリックします。
出力するフィールドを選択し、NEXT をクリックします。
指定したフィールドに対して、フィルター条件を設定し、NEXT をクリックします。
トレースファイルの保存条件を設定し、NEXT をクリックします。
Script をクリックすると、ETW に対応したスクリプトが生成されます。
下記のようなスクリプトが生成されます。
CREATE EVENT SESSION [ETWTest] ON SERVER
ADD EVENT sqlserver.filestream_file_io_failure(
ACTION(package0.callstack,package0.collect_cpu_cycle_time,package0.collect_current_thread_id,package0.collect_system_time,package0.event_sequence,package0.last_error,package0.process_id,sqlos.cpu_id,sqlos.numa_node_id,sqlos.scheduler_address,sqlos.scheduler_id,sqlos.task_time,sqlserver.client_app_name,sqlserver.client_connection_id,sqlserver.client_hostname,sqlserver.client_pid,sqlserver.context_info,sqlserver.database_id,sqlserver.database_name,sqlserver.is_system,sqlserver.nt_username,sqlserver.plan_handle,sqlserver.query_hash,sqlserver.query_plan_hash,sqlserver.request_id,sqlserver.session_id,sqlserver.sql_text,sqlserver.transaction_id,sqlserver.username)
WHERE ([sqlserver].[database_name]=N'TESTDB')),
ADD EVENT sqlserver.plan_guide_successful(
ACTION(package0.callstack,package0.collect_cpu_cycle_time,package0.collect_current_thread_id,package0.collect_system_time,package0.event_sequence,package0.last_error,package0.process_id,sqlos.cpu_id,sqlos.numa_node_id,sqlos.scheduler_address,sqlos.scheduler_id,sqlos.task_time,sqlserver.client_app_name,sqlserver.client_connection_id,sqlserver.client_hostname,sqlserver.client_pid,sqlserver.context_info,sqlserver.database_id,sqlserver.database_name,sqlserver.is_system,sqlserver.nt_username,sqlserver.plan_handle,sqlserver.query_hash,sqlserver.query_plan_hash,sqlserver.request_id,sqlserver.session_id,sqlserver.sql_text,sqlserver.transaction_id,sqlserver.username)
WHERE ([sqlserver].[database_name]=N'TESTDB')),
ADD EVENT sqlserver.sp_cache_hit(
ACTION(package0.callstack,package0.collect_cpu_cycle_time,package0.collect_current_thread_id,package0.collect_system_time,package0.event_sequence,package0.last_error,package0.process_id,sqlos.cpu_id,sqlos.numa_node_id,sqlos.scheduler_address,sqlos.scheduler_id,sqlos.task_time,sqlserver.client_app_name,sqlserver.client_connection_id,sqlserver.client_hostname,sqlserver.client_pid,sqlserver.context_info,sqlserver.database_id,sqlserver.database_name,sqlserver.is_system,sqlserver.nt_username,sqlserver.plan_handle,sqlserver.query_hash,sqlserver.query_plan_hash,sqlserver.request_id,sqlserver.session_id,sqlserver.sql_text,sqlserver.transaction_id,sqlserver.username)
WHERE ([sqlserver].[database_name]=N'TESTDB')),
ADD EVENT sqlserver.sp_statement_completed(
ACTION(package0.callstack,package0.collect_cpu_cycle_time,package0.collect_current_thread_id,package0.collect_system_time,package0.event_sequence,package0.last_error,package0.process_id,sqlos.cpu_id,sqlos.numa_node_id,sqlos.scheduler_address,sqlos.scheduler_id,sqlos.task_time,sqlserver.client_app_name,sqlserver.client_connection_id,sqlserver.client_hostname,sqlserver.client_pid,sqlserver.context_info,sqlserver.database_id,sqlserver.database_name,sqlserver.is_system,sqlserver.nt_username,sqlserver.plan_handle,sqlserver.query_hash,sqlserver.query_plan_hash,sqlserver.request_id,sqlserver.session_id,sqlserver.sql_text,sqlserver.transaction_id,sqlserver.username)
WHERE ([sqlserver].[database_name]=N'TESTDB'))
ADD TARGET package0.event_file(SET filename=N'ETWTest')
WITH (STARTUP_STATE=OFF)
GO
ETW に対応したスクリプトが簡単に生成できますね。これで問題なしです。