尝试创建SERVER EVENT SESSION以捕获blocked_process_report& xml_deadlock_report事件到文件以供以后使用以下语句进行分析;
CREATE EVENT SESSION [blocked_process] ON SERVER
ADD EVENT sqlserver.blocked_process_report(
ACTION(sqlserver.client_app_name,
sqlserver.client_hostname,
sqlserver.database_name)) ,
ADD EVENT sqlserver.xml_deadlock_report (
ACTION(sqlserver.client_app_name,
sqlserver.client_hostname,
sqlserver.database_name))
ADD TARGET package0.asynchronous_file_target
(SET filename = N'c:\temp\XEventSessions\blocked_process.xel',
metadatafile = N'c:\temp\XEventSessions\blocked_process.xem',
max_file_size=(65536),
max_rollover_files=5)
WITH (MAX_DISPATCH_LATENCY = 5SECONDS)
收到以下错误尝试执行此语句;
Msg 25623,Level 16,State 1,Line 1 事件名称“sqlserver.blocked_process_report”无效,或者无法找到对象**
按 sys.dm_xe_objects
的名称顺序查询SELECT * FROM sys.dm_xe_objects 按名称排序;
从binary_data转到boolean,找不到“blocked_process_report”,因此出错。
当前版本:Microsoft SQL Server 2008 R2(SP2) - 10.50.4000.0(X64)2012年6月28日08:36:30版权所有(c)Windows NT 6.1上的Microsoft Corporation Express Edition(64位)(Build 7601: Service Pack 1)
我看到其他关于这个缺失事件的问题的引用,但没有回复。
我做错了什么?
答案 0 :(得分:2)
不幸的是,在SQL Server 2012中,blocked_process_report被添加为可跟踪的扩展事件。
由于在SQL Server 2012之前未添加扩展事件向导,因此我将使用以下查询来查看可用的扩展事件:
SELECT *
FROM sys.dm_xe_objects AS Events
WHERE Events.object_type = 'event' AND Events.name LIKE '%blocked%'
ORDER BY Events.name;
甚至更好地阅读Jonathan Kehayias撰写的this非常好的文章。
答案 1 :(得分:0)
在同一问题上花费了大量时间,然后终于设法解决了它。发生此错误的原因有两个:
尝试在不支持该事件的 SQL Server 版本上创建扩展事件会话,即扩展事件 add_xact_outcome
存在于 SQL Server 2019 但不存在于 SQL Server 2012 中,因此尝试使用 { 创建扩展事件SQL Server 2012 中的 {1}} 将返回此错误。
这是一个棘手的问题。 add_xact_outcome
中有一个名为 sys.dm_xe_objects
的列,可以仅为非私人扩展事件创建扩展事件会话。尝试为私人活动创建扩展活动会话也会返回此错误。
因此,我们需要添加另一个 capabilities_desc
条件:
WHERE
是的,SELECT *
FROM sys.dm_xe_objects AS Events
WHERE
Events.object_type = 'event'
AND
Events.name LIKE '%blocked%'
AND
(Events.capabilities_desc <> 'private' OR Events.capabilities_desc is null)
ORDER BY Events.name;
是处理空值的特殊情况,因为这些值不在 Events.capabilities_desc is null
下处理。
重要的是,如果我们尝试通过向导创建扩展事件会话,那么出于同样的原因,可用扩展事件列表不会显示私有扩展事件。
Private extended events in SQL Server 2019, note events starting with vdw_
现在,如果我们搜索,比如说,从 'private'
开始并且没有显示任何事件
Searching extended events while creating extended event via wizard
在 Microsoft 文档中发现相同: sys.dm_xe_objects (Transact-SQL)
<块引用>私人。唯一可供内部使用的对象,并且不能 可以通过 CREATE/ALTER EVENT SESSION DDL 访问。审计事件和 除了少数目标外,目标也属于这一类 内部使用的对象。