关于SQLServer死锁的诊断和定位
来源:互联网 发布:linux shell 定义变量 编辑:程序博客网 时间:2024/05/18 13:42
原创于2008年06月18日,2009年10月18日迁移至此。
关于SQLServer死锁的诊断和定位
在SQLServer中经常会发生死锁情况,必须连接到企业管理器—>管理—>当前活动—>锁/进程ID去查找相关死锁进程和定位死锁的原因。
通过查询分析器也要经过多个系统表(sysprocesses,sysobjects等)和系统存储过程(sp_who,sp_who2,sp_lock等),而且不一定能够直接定位到。
本存储过程参考sp_lock_check和sysprocesses系统表,同时利用了DBCC命令,直接将死锁和造成死锁的进程和相关语句列出,以方便分析和定位。
Create procedure sp_check_deadlock
as
set nocount on
/*
select
spid 被锁进程ID,
blocked锁进程ID,
status 被锁状态,
SUBSTRING(SUSER_SNAME(sid),1,30)被锁进程登陆帐号,
SUBSTRING(hostname,1,12) 被锁进程用户机器名称,
SUBSTRING(DB_NAME(dbid),1,10) 被锁进程数据名称,
cmd被锁进程命令,
waittype被锁进程等待类型
FROM master..sysprocesses
WHERE blocked>0
--dbcc inputbuffer(66)输出相关锁进程的语句
*/
--创建锁进程临时表
CREATE TABLE #templocktracestatus (
EventType varchar(100),
Parameters INT,
EventInfo varchar(200)
)
--创建被锁进程临时表
CREATE TABLE #tempbelocktracestatus (
EventType varchar(100),
Parameters INT,
EventInfo varchar(200)
)
--创建之间的关联表
CREATE TABLE #locktracestatus (
belockspid INT,
belockspidremark varchar(20),
belockEventType varchar(100),
belockEventInfo varchar(200),
lockspid INT,
lockspidremark varchar(20),
lockEventType varchar(100),
lockEventInfo varchar(200)
)
--获取死锁进程
DECLARE dbcc_inputbuffer CURSOR READ_ONLY
FOR select spid被锁进程ID,blocked锁进程ID
FROM master..sysprocesses
WHERE blocked>0
DECLARE @lockedspid int
DECLARE @belockedspid int
OPEN dbcc_inputbuffer
FETCH NEXT FROM dbcc_inputbuffer INTO @belockedspid,@lockedspid
WHILE (@@fetch_status <> -1)
BEGIN
IF (@@fetch_status <> -2)
BEGIN
--print '被堵塞进程'
--select @belockedspid
--dbcc inputbuffer(@belockedspid)
--print '堵塞进程'
--select @lockedspid
--dbcc inputbuffer(@lockedspid)
INSERT INTO #tempbelocktracestatus
EXEC('DBCC INPUTBUFFER('+@belockedspid+')')
INSERT INTO #templocktracestatus
EXEC('DBCC INPUTBUFFER('+@lockedspid+')')
INSERT INTO #locktracestatus
select @belockedspid,'被锁进程',a.EventType,a.EventInfo,@lockedspid,'锁进程',b.EventType,b.EventInfo
from #tempbelocktracestatus a,#templocktracestatus b
END
FETCH NEXT FROM dbcc_inputbuffer INTO @belockedspid,@lockedspid
END
CLOSE dbcc_inputbuffer
DEALLOCATE dbcc_inputbuffer
select * from #locktracestatus
return (0) -- sp_check_deadlock
执行该存储过程
exec sp_check_deadlock
- 关于SQLServer死锁的诊断和定位
- 关于SQLServer死锁的诊断和定位
- 关于SQLServer死锁的诊断和定位
- sqlserver之定位死锁
- sqlserver定位死锁
- 避免死锁和死锁诊断
- 关于SQL server2005+SP3的死锁的一次诊断过程
- SQLServer的死锁
- 利用sys.sysprocesses检查SqlServer的阻塞和死锁
- v利用sys.sysprocesses检查SqlServer的阻塞和死锁 .
- 如何快速发现和处理sqlserver数据库的死锁
- 启动SQLServer的死锁检查
- 启动SQLServer的死锁检查
- sqlserver 死锁的一些总结
- 启动SQLServer的死锁检查
- 杀掉死锁的sqlserver进程
- sqlserver检查死锁的sql
- SqlServer表死锁的解决方法
- 关于数据仓库中复杂报表SQL语句的写法
- 百度优化是最棒的搜索引擎优化之一
- officeXP打开docx文档的方法
- 最强烈鄙视科迈!
- JAVA开发者最常去的20个英文网站
- 关于SQLServer死锁的诊断和定位
- 获取SQLServer的最完整数据字典的SQL语句
- Window下Android SDK安装
- 常用查看连接数命令
- Ubuntu忘记用户名和密码的解决办法
- 分析表无索引为什么sp_spaceused 中的index_size不为0
- 关于SQLServer2000的全文检索使用心得
- 关于触发器在行级和语句级的执行顺序问题
- 安装 上网 更新源文件