SQL Server 2008扩展事件捕获阻塞进程报告报错咨询
关于SQL Server 2008捕获阻塞进程报告的问题解答
A) SQL Server 2008是否支持blocked_process_report扩展事件?
答案是不支持。sqlserver.blocked_process_report这个扩展事件是从SQL Server 2012版本才正式引入的,所以你在SQL Server 2008的sys.dm_xe_objects视图中查询不到该对象是完全正常的,这也是你执行脚本时报错的根本原因。
B) 原始脚本的修改方案及替代实现
由于SQL Server 2008没有专门的blocked_process_report扩展事件,你需要通过以下步骤来实现捕获阻塞进程的需求:
先配置阻塞阈值
首先需要开启并设置blocked_process_threshold服务器配置选项,它控制SQL Server生成阻塞进程报告的时间阈值(单位为秒,默认值0表示禁用)。例如设置为5秒:sp_configure 'show advanced options', 1; RECONFIGURE; GO sp_configure 'blocked_process_threshold', 5; RECONFIGURE; GO选择合适的捕获方式
你有两种可行的方案:- 方案一:使用SQL Server Profiler
在SQL Server 2008中,可以通过Profiler跟踪Blocked Process Report事件来获取阻塞信息,这是比较直接的方式。 - 方案二:扩展事件替代方案
虽然没有专门的阻塞事件,但可以通过sqlserver.wait_info事件结合筛选条件来捕获阻塞相关的等待信息。以下是修改后的扩展事件脚本:
说明:CREATE EVENT SESSION [IA_BlockedProcesses] ON SERVER ADD EVENT sqlserver.wait_info( ACTION(sqlserver.client_app_name, sqlserver.client_hostname, sqlserver.database_name, sqlserver.session_id, sqlserver.sql_text) WHERE ([wait_type] LIKE N'LCK_M_%' AND [duration] >= 5000000) -- 5秒,单位为微秒 ), 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:\Isaac\blocked_process.xel', metadatafile = N'c:\Isaac\blocked_process.xem', max_file_size = (65536), max_rollover_files = 5 ) WITH (MAX_DISPATCH_LATENCY = 5SECONDS) GO- 用
sqlserver.wait_info事件筛选所有锁等待类型(LCK_M_*),并且等待时长超过你设置的阈值(5秒=5000000微秒) - 补充了
sqlserver.session_id和sqlserver.sql_text操作,方便你定位具体的阻塞会话和SQL语句 - 修正了原始脚本中两个
ADD EVENT之间缺失的逗号问题(不过这不是导致你报错的主要原因)
- 用
- 方案一:使用SQL Server Profiler
内容的提问来源于stack exchange,提问作者LegalEagle
相关产品推荐
相关产品推荐

