SQL Server Blocking 与 Extended Events

本文介绍了如何使用SQL Server Management Studio的标准报告和Extended Events功能监测SQL Server中的锁与阻塞情况,包括如何配置和使用这些工具进行实时及长期监控。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Relational Database 最不缺少的就是 locks. 我们可以即时的或者持续的查看系统发生的 lock 情况,作用就是分析有没有阻塞 blocking 发生的威胁 。

  1. 及时的查看阻塞 blocking 情况, sql server management studio 2014 提供的 standard reports 就能很好的参考:
    这里写图片描述

这是一份很即时的报告, 提供类似功能的还有 sql server management studio 2005 的 Performance DashBoard。但是 sql server 2008 开始,提供了 standard reports 和 data collector data warehouse之后,这些 Dashboard报表都不怎么支持了。但是还是很管用。这些 Dashboard 报表都是基于 reporting service RDL 来创建的,相当于是给了我们一份源代码。 有兴趣可以去微软官网下了学习下,通过 custom reports 这个菜单导入。

那么回到新功能 standard reports 上来, 这些标准报表是如何实现的呢?也是由 reporting service reports 创建的?藏身于哪个目录呢? Grant Fritchey(sql server performance distill 作者) 认为,这是和 custom reports 不一样的地方,这些标准报表被保护起来了,看不到报表文件,也就是不能被直接访问。这里可以猜想,这些报表文件被 Dll 给打包起来了,可以自己封装试试看。

事实上,这些 standard reports 是可以从微软官网下到的,地址是: http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-00-73-29-10/ssms-standard-reports.zip

通过这么俩个简单的报表例子,我发现其实很多功能是微软发布新功能的时候有介绍的,只不过我们一般不去做深入的研究而忽略了,导致的后果就是我们需要花很多自己的时间来实现这些功能。

2 通过 Extended Events ,我们也可以监控一段时间内的的 blocking 情况:前提条件要开启这个阀门:

sp_configure 'show advanced options', 1 ;
GO
RECONFIGURE ;
GO
sp_configure 'blocked process threshold', 5 ;
GO
RECONFIGURE ;

2.1 Extended Events 概念:由一系列自动触发的 event 产生性能数据,经过 event engine 的收集,存放到指定的输出文件,以供后续的分析。

2.2 XE 涉及到的动态管理试图 :
sys.dm_xe_packages; sys.dm_xe_objects;sys.dm_xe_sessions

2.3 基本用法:

2.3.1 创建一个 Event Session

create event session capture_sql_events
on server
add event sqlserver.blocked_process_report
(action(sqlserver.sql_text))
add target package0.asynchronous_file_target
(set filename = 'c:\capture_sql_events.xel', metadatafile = 'c:\capture_sql_event.xem'
)

2.3.2 启用这个 Event session 来收集数据

alter event session capture_sql_events
on server
STATE = start
go

2.3.3 停用这个 Event session

alter event session capture_sql_events
on server
state = stop
go

2.3.4 修改一个 session 来增加或者删除对 Event 的监控

alter event session capture_sql_events on server
add event sqlserver.sql_batch_completed (action(sqlserver.sql_text))
go

2.3.5 查看正在运行的 Event Session

select * from sys.dm_xe_sessions
select * from sys.dm_xe_session_events

2.3.6 查看收集到的统计数据

select CONVERT(xml , event_data)  ,*
from sys.fn_xe_file_target_read_file('c:\capture_sql_events*.xel','c:\capture_sql_event*.xem',null,null)

以上是基于 sql server 2012 创建的 ,在 sql server 2008R2 中并没有 sqlserver.blocked_process_report 一档 event.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dbLenis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值