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

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

SQL トレースの ETW への対応について - 補足 -

 SQL トレースの ETW への対応について で ETW のスクリプト生成に対応してほしいなぁという記事を書いていました。ETW って SQL Server Management Studio から生成できるんですね。( 知りませんでした。) むぅ、勉強が足りなさすぎますね。ちょっと試してみましょう。Management → Session → New Session Wizard をクリックします。

f:id:koogucc11:20131115231000p:plain

 Session name を入力して、NEXT をクリックします。

f:id:koogucc11:20131115231411p:plain

 NEXT をクリックします。

f:id:koogucc11:20131115231532p:plain

 イベントを選択し、NEXT をクリックします。

f:id:koogucc11:20131115231845p:plain

 出力するフィールドを選択し、NEXT をクリックします。

f:id:koogucc11:20131115232158p:plain

 指定したフィールドに対して、フィルター条件を設定し、NEXT をクリックします。

f:id:koogucc11:20131115232431p:plain

 トレースファイルの保存条件を設定し、NEXT をクリックします。

f:id:koogucc11:20131115232609p:plain

 Script をクリックすると、ETW に対応したスクリプトが生成されます。

f:id:koogucc11:20131115232723p:plain

 下記のようなスクリプトが生成されます。

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 に対応したスクリプトが簡単に生成できますね。これで問題なしです。