0

尝试使用以下语句创建 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)

收到以下错误尝试执行此语句;

消息 25623,级别 16,状态 1,第 1 行事件名称“sqlserver.blocked_process_report”无效,或找不到对象**

按sys.dm_xe_objects名称顺序查询

SELECT * FROM sys.dm_xe_objects 按名称排序;

从 binary_data 到布尔值,没有找到“blocked_process_report”,因此出现错误。

当前版本:Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64) 2012 年 6 月 28 日 08:36:30 版权所有 (c) Microsoft Corporation Express Edition (64-bit) o​​n Windows NT 6.1 (Build 7601: Service Pack 1 )

我看到其他关于此失踪事件的问题的参考资料,但没有回复。

我究竟做错了什么?

4

2 回答 2

2

不幸的是,blocked_process_report 在 SQL Server 2012 中被添加为可跟踪的扩展事件。

由于直到 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 的这篇非常好的文章

于 2016-09-23T12:03:39.433 回答
0

在同一个问题上花了很多时间,然后终于设法解决了它。由于两个原因,可能会发生此错误:

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

  2. 这是一个棘手的问题。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'.

重要的是,如果我们尝试通过向导创建扩展事件会话,则可用扩展事件列表不会显示私有扩展事件,原因相同。

SQL Server 2019 中的私有扩展事件,注意事件以vdw_

现在,如果我们搜索,比如说,从 开始vdw_并且没有显示任何事件

通过向导创建扩展事件时搜索扩展事件

在 Microsoft 文档中找到相同的内容: sys.dm_xe_objects (Transact-SQL)

私人的。唯一可供内部使用且无法通过 CREATE/ALTER EVENT SESSION DDL 访问的对象。除了少数内部使用的对象外,审计事件和目标也属于这一类。

于 2021-02-17T05:51:41.377 回答