查询Sqlserver数据库死锁的一个存储过程分享
使用sqlserver作为数据库的应用系统,都避免不了有时候会产生死锁, 死锁出现以后,维护人员或者开发人员大多只会通过sp_who来查找死锁的进程,然后用sp_kill杀掉。利用sp_who_lock这个存储过程,可以很方便的知道哪个进程出现了死锁,出现死锁的问题在哪里.
创建sp_who_lock存储过程
CREATE procedure sp_who_lock
as
begin
declare @spid int
declare @blk int
declare @count int
declare @index int
declare @lock tinyint
set @lock=0
create table #temp_who_lock
(
id int identity(1,1),
spid int,
blk int
)
if @@error 0 return @@error
insert into #temp_who_lock(spid,blk)
select 0 ,blocked
from (select * from master..sysprocesses where blocked 0)a
where not exists(select * from master..sysprocesses where a.blocked =spid and blocked 0)
union select spid,blocked from master..sysprocesses where blocked 0
if @@error 0 return @@error
select @count=count(*),@index=1 from #temp_who_lock
if @@error 0 return @@error
if @count=0
begin
select 没有阻塞和死锁信息
return 0
end
while @index =@count
begin
if exists(select 1 from #temp_who_lock a where id @index and exists(select 1 from #temp_who_lock where id =@index and a.blk=spid))
begin
set @lock=1
select @spid=spid,@blk=blk from #temp_who_lock where id=@index
select 引起数据库死锁的是: + CAST(@spid AS VARCHAR(10)) + 进程号,其执行的SQL语法如下
select @spid, @blk
dbcc inputbuffer(@spid)
dbcc inputbuffer(@blk)
end
set @index=@index+1
end
if @lock=0
begin
set @index=1
while @index =@count
begin
select @spid=spid,@blk=blk from #temp_who_lock where id=@index
if @spid=0
select 引起阻塞的是: +cast(@blk as varchar(10))+ 进程号,其执行的SQL语法如下
else
select 进程号SPID: + CAST(@spid AS VARCHAR(10))+ 被 + 进程号SPID: + CAST(@blk AS VARCHAR(10)) + 阻塞,其当前进程执行的SQL语法如下
dbcc inputbuffer(@spid)
dbcc inputbuffer(@blk)
set @index=@index+1
end
end
drop table #temp_who_lock
return 0
end
在查询分析器中执行:
exec sp_who_lock
直到最后的结果为:**
我想要获取技术服务或软件
服务范围:MySQL、ORACLE、SQLSERVER、MongoDB、PostgreSQL 、程序问题
服务方式:远程服务、电话支持、现场服务,沟通指定方式服务
技术标签:数据恢复、安装配置、数据迁移、集群容灾、异常处理、其它问题
本站部分文章参考或来源于网络,如有侵权请联系站长。
数据库远程运维 查询Sqlserver数据库死锁的一个存储过程分享
相关文章
- 精准优化:SQL Server 数据库运行更快(sqlserver数据库优化)
- 让SQLServer更加稳健:创建约束(sqlserver创建约束)
- 塔罗斯专利技术:借助直连海量SQL Server数据库(直连sqlserver)
- 解决SQL Server数据库锁死问题(电脑sqlserver锁)
- 教你学习用SqlServer创建数据库(用sqlserver)
- 利用微型SQLServer提升企业的数据库运算能力(微型sqlserver)
- SQLServer数据库备份表的操作与管理(备份表sqlserver)
- 如何在SQLServer中创建表列名(列名 sqlserver)
- 解决SQLServer数据锁定问题(sqlserver锁数据)
- 使用C连接SQLServer数据库(sqlserver链接c)
- 值数据库查询:SQLServer返回丰富信息(sqlserver返回)
- 数据库SQLServer:经济又高效的投资(sqlserver花费)
- SQL Server:一款让你轻松管理数据的强大数据库服务器(sqlserver的简介)
- 解决SQLServer数据库性能阻塞问题(sqlserver查阻塞)
- 备份使用SQLServer实现提前备份保障数据安全(sqlserver提前)
- SQLServer数据库扩展功能探索(sqlserver扩展库)
- 利用SQL Server建构数据库的绝佳之路(sqlserver建造)
- SQLServer:一种领先的关系型数据库管理系统(sqlserver属于)
- SQL Server实验——一步一步探索数据库之路(sqlserver实验一)
- SQLServer数据库合并:实现数据库的最大管理效率(sqlserver合并)
- 存储实现高性能:使用SqlServer双网卡存储(sqlServer双网卡)
- SQLServer 停止运行:困境与对策(sqlserver 停止)
- SQLServer中空值处理策略(sqlserver值为空)
- SQLserver 技术专家谈数据库未来展望(sqlserver 专家)
- SQL Server数据库中的与或非运算(sqlserver与或非)
- Python操作SQLServer数据库:横扫数据库任务(py sqlserver)