Relational Database 最不缺少的就是 locks. 我们可以即时的或者持续的查看系统发生的 lock 情况,作用就是分析有没有阻塞 blocking 发生的威胁 。
这是一份很即时的报告, 提供类似功能的还有 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.