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

本文介绍了一种使用SQL Server的简单脚本定时查询并统计当前正在发生堵塞的会话及被堵塞的会话的方法,避免了使用Profiler带来的高开销。

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

之前文章(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








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值