sys.dm_xe_objects中缺少扩展事件阻止进程报告

时间:2016-09-21 16:05:12

标签: sql-server sql-server-2008-r2 extended-events

尝试创建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)

我看到其他关于这个缺失事件的问题的引用,但没有回复。

我做错了什么?

2 个答案:

答案 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)

在同一问题上花费了大量时间,然后终于设法解决了它。发生此错误的原因有两个:

  1. 尝试在不支持该事件的 SQL Server 版本上创建扩展事件会话,即扩展事件 add_xact_outcome 存在于 SQL Server 2019 但不存在于 SQL Server 2012 中,因此尝试使用 { 创建扩展事件SQL Server 2012 中的 {1}} 将返回此错误。

  2. 这是一个棘手的问题。 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 访问。审计事件和 除了少数目标外,目标也属于这一类 内部使用的对象。