一:问题描述:
--查询语句:
SELECT *
FROM sys.dm_xe_sessionsWHERE name='MONITORING_DEADLOCK2'
--结果是空的(之前已经创建过该事件会话)
试图再次创建下该会话
语句:
CREATE EVENT SESSION MONITORING_DEADLOCK2 ON SERVER
ADD EVENT sqlserver.xml_deadlock_report
(
ACTION(sqlos.worker_address,sqlserver.client_app_name,sqlserver.client_hostname,sqlserver.client_pid,sqlserver.database_id,sqlserver.database_name,sqlserver.query_plan_hash,sqlserver.session_id,sqlserver.session_nt_username,sqlserver.sql_text,sqlserver.username)
)
ADD TARGET package0.ring_buffer
WITH (MAX_DISPATCH_LATENCY = 30 SECONDS);
报错:
二:出错原因:
该事件会话未启动(昨天,我关了次服务器,重新启动后,事件会话却没有启动,故查询不到该事件会话信息)
三:解决办法:
方法一:手动启动该事件会话(弊端:如果服务器重启的话,还得手动重启该事件会话)
ALTER EVENT SESSION MONITORING_DEADLOCK2 ON SERVER STATE = START;
现在,再查询下,就有了
--查询语句:
SELECT *
FROM sys.dm_xe_sessionsWHERE name='MONITORING_DEADLOCK2'
方法二:设置’在服务器启动时启动事件会话‘
展开’对象资源管理器‘->管理->会话->右击该事件会话,点击’属性‘,如图:
勾选’在服务器启动时启动事件会话‘,如图: