用存储过程查出引起死锁的进程和SQL语句
2013-05-29 13:05
411 查看
假如发生了死锁,我们怎么去检测具体发生死锁的是哪条SQL语句或存储过程?此时我们可以使用以下存储过程来检测,就可以查出引起死锁的进程和SQL语句。
(责任编辑:卢兆林)
use master go create procedure sp_who_lock as begin declare @spid int,@bl int, @intTransactionCountOnEntry int, @intRowcount int, @intCountProperties int, @intCounter int create table #tmp_lock_who ( id int identity(1,1), spid smallint, bl smallint) IF @@ERROR<>0 RETURN @@ERROR insert into #tmp_lock_who(spid,bl) select 0 ,blocked from (select * from sysprocesses where blocked>0 ) a where not exists(select * from (select * from sysprocesses where blocked>0 ) b where a.blocked=spid) union select spid,blocked from sysprocesses where blocked>0 IF @@ERROR<>0 RETURN @@ERROR -- 找到临时表的记录数 select @intCountProperties = Count(*),@intCounter = 1 from #tmp_lock_who IF @@ERROR<>0 RETURN @@ERROR if @intCountProperties=0 select '现在没有阻塞和死锁信息' as message -- 循环开始 while @intCounter <= @intCountProperties begin -- 取第一条记录 select @spid = spid,@bl = bl from #tmp_lock_who where Id = @intCounter begin if @spid =0 select '引起数据库死锁的是: '+ CAST(@bl AS VARCHAR(10)) + '进程号,其执行的SQL语法如下' else select '进程号SPID:'+ CAST(@spid AS VARCHAR(10))+ '被' + '进程号SPID:'+ CAST(@bl AS VARCHAR(10)) +'阻塞,其当 前进程执行的SQL语法如下'DBCC INPUTBUFFER |
相关文章推荐
- 用存储过程查出引起死锁的进程和SQL语句--数据库死锁原因及解决办法
- 用存储过程查出引起死锁的进程和SQL语句
- 针对大表 设计高效的存储过程【原理篇】 附最差性能sql语句进化过程客串
- 在sql的函数里面不能使用insert语句,估计update、delete也不行,改为存储过程就行了。
- pl/sql developer中用execute调用存储过程弹出‘无效的sql语句’…该怎么解决
- 存储过程中用exec执行sql语句问题
- Hibernate 调用SQL Server2008的存储过程(有参无参两种情况)和SQL语句
- 存储过程、复杂SQL语句、ORM的陷阱
- SQL查询的时候能查询到结果,但是将SQL语句改为存储过程的时候就提示表不存在
- 常用 SQL 语句总结 (主要是存储过程中的使用)
- 存储过程和T-SQL语句的执行计划重用性比较
- 存储过程和SQL语句比较及存储过程在C#中调用方法
- Entity Framework Code First执行SQL语句、视图及存储过程
- Oracle采用存储过程执行sql语句,将查询到的数据导出到EXCEL中
- [传智播客学习日记]SQL语句一例通之二——查询、存储过程
- 一次性删除数据库所有表和所有存储过程 SQL语句
- 从已有数据库生成脚本来获得生成数据表、视图、函数、存储过程以及触发器的SQL语句
- 直接从SQL语句问题贴子数据建表并生成建表语句的存储过程
- 利用SQL语句查找某数据库中所有存储过程包含的内容
- 在SQL SERVER中定时执行SQL语句,或者存储过程