(
ACTION
(
sqlos.task_time,
sqlserver.database_name,
sqlserver.nt_username,
sqlserver.username,
sqlserver.sql_text,
sqlserver.session_id,
sqlserver.transaction_id
) WHERE [duration]>=3000000
),
ADD EVENT sqlserver.sql_batch_completed
(
ACTION
(
sqlos.task_time,
sqlserver.database_name,
sqlserver.nt_username,
sqlserver.username,
sqlserver.sql_text,
sqlserver.session_id,
sqlserver.transaction_id
) WHERE [duration]>=3000000
),
ADD EVENT sqlos.wait_info
(
ACTION
(
sqlos.task_time,
sqlserver.database_name,
sqlserver.nt_username,
sqlserver.sql_text,
sqlserver.username,
sqlserver.session_id,
sqlserver.transaction_id
) WHERE session_id>50
and opcode=1
and duration>0
and sql_text not like '%sp_MScdc_capture_job%' --排除某些信息
--and username = '' --限定只记录某些信息
),
ADD EVENT sqlos.wait_info_external
(
ACTION
(
sqlos.task_time,
sqlserver.database_name,
sqlserver.nt_username,
sqlserver.username,
sqlserver.sql_text,
sqlserver.session_id,
sqlserver.transaction_id
) WHERE session_id>50
and opcode=1
and duration>0
and sql_text not like '%sp_MScdc_capture_job%'
--and username = ''
)
ADD TARGET package0.event_file
(
SET filename=N'D:XEventFilesCollectionSessionWaitStats',
max_file_size=(1024),
max_rollover_files=(10)
)
WITH (
MAX_MEMORY=4096 KB,
EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,
MAX_DISPATCH_LATENCY=30 SECONDS,
MAX_EVENT_SIZE=0 KB,
MEMORY_PARTITION_MODE=NONE,
TRACK_CAUSALITY=OFF,
STARTUP_STATE=ON
)
GO
-- 启用(停止)事件会话(START / STOP)
ALTER EVENT SESSION CollectionSessionWaitStats ON SERVER STATE=START
GO
是用扩展事件收集的Session级别的等待信息有以下几个特点
1,SessionId是可以重复的
举例说明就是:比如一个SessionId = 80的Session,可以第一次执行一个SQLA,第二次执行一个SQLB.
同时这两个SQL的执行与其执行过程中产生的等待信息都可以被捕获出来
2,同一个时间段内,一个同一个SessionId不可能同时执行,
比如16:46:36秒到16:46:46秒到这个时间内,SessionId = 80的Session正在执行,扩展事件捕获到了其产生的等待信息
但是在16:46:36秒到16:46:46这个时间段内,不可能有另外一个SessionId = 80也在执行,这个逻辑不难理解
为什么要特意说明这个问题?
因为扩展事件收集到的事件信息中SQL语句完成事件(rpc_completed或者sql_batch_completed)与产生的等待之间,没有一个直接的对应关系。










