0
点赞
收藏
分享

微信扫一扫

SQL Server 维护脚本分享(14)堵塞SQL跟踪


之前文章(​​SQLServer 利用profiler生成脚本在后台跟踪堵塞语句或慢查询语句​​) 有用 profiler 可以慢查询或堵塞查询,但是profiler 开销太大,又需要指定时长。现在用个简单sql定时查询统计。


最底部执行的脚本,会查询当前正在被堵塞和堵塞其他会话的会话。

use [master]
go
create database Demo
go
alter database Demo set recovery simple with no_wait
go
use Demo
go
-- 创建表结构
-- drop table dbo.blockedSession
select GETDATE() as addTime,spid,blocked,waittime,lastwaittype,waitresource,open_tran,status
,p.dbid,cpu,physical_io,memusage,login_time,last_batch,hostname,[program_name]
,hostprocess,cmd,nt_domain,nt_username,net_address,net_library,loginame,sql_handle,text
into dbo.blockedSession
from master.dbo.sysprocesses p cross apply sys.dm_exec_sql_text(p.sql_handle) s where 1<>1
go
alter table dbo.blockedSession add constraint DF_blockedSession_addTime default(getdate()) for addTime
go


--创建定时任务执行,如10秒执行一次.
insert into Demo.dbo.blockedSession(spid,blocked,waittime,lastwaittype,waitresource,open_tran,status
,p.dbid,cpu,physical_io,memusage,login_time,last_batch,hostname,[program_name]
,hostprocess,cmd,nt_domain,nt_username,net_address,net_library,loginame,sql_handle,text)
select spid,blocked,waittime,lastwaittype,waitresource,open_tran,status
,p.dbid,cpu,physical_io,memusage,login_time,last_batch,hostname,[program_name]
,hostprocess,cmd,nt_domain,nt_username,net_address,net_library,loginame,sql_handle,text
from master.dbo.sysprocesses p with(nolock) cross apply sys.dm_exec_sql_text(p.sql_handle) s
where blocked >0 or spid in(select sp.blocked from master.dbo.sysprocesses sp with(nolock) where sp.blocked>0)
go








举报

相关推荐

0 条评论