SQL Server死锁的解除方法

转载 2013年12月04日 17:24:08
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 (@bl )
 end 
 
-- 循环指针下移
 set @intCounter = @intCounter + 1
end
 
drop table #tmp_lock_who
 
return 0
end


 EXEC sp_who_lock


KILL  104


------------------方法2------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

sqlserver查看锁及解锁


sqlserver查看锁及解锁

查看被锁表:  
select   request_session_id   spid,OBJECT_NAME(resource_associated_entity_id) tableName   
from   sys.dm_tran_locks where resource_type='OBJECT'
 
spid   锁表进程 
tableName   被锁表名
 
解锁:
 
declare @spid  int 
Set @spid  = 71--锁表进程
declare @sql varchar(1000)
set @sql='kill '+cast(@spid  as v



杀掉死锁的sqlserver进程

杀掉死锁的sqlserver进程   SELECT request_session_id spid,OBJECT_NAME (resource_associated_entity_id)tableNa...
  • lxl743p
  • lxl743p
  • 2014年11月25日 14:15
  • 10951

sqlserver检查死锁的sql

select a.spid blocking_spid,a.blocked,c.text blocking_text,d.text blocked_text from sys.sysprocesses...
  • wem520
  • wem520
  • 2014年12月31日 15:42
  • 2790

查询及删除sql数据库死锁

  • 2012年10月04日 11:34
  • 1KB
  • 下载

嵌套删除SQL引起的死锁问题分析

应用系统后台有两个计划任务 每天1:00定时删除N天前的计划日志表数据 每隔5分钟统计AP终端在线用户数并更新计划日志表某一条记录的状态...
  • cza55007
  • cza55007
  • 2016年02月27日 14:00
  • 536

sql server 查看表的死锁和Kill 死锁进程

查询出来 select        request_session_id spid,       OBJECT_NAME(resource_associated_entity_id) ta...
  • chenghaibing2008
  • chenghaibing2008
  • 2012年08月05日 11:07
  • 77491

SQL查看死锁+清理死锁

----查看sql死锁 CREATE procedure sp_who_lock    as      begin         declare @spid int        ...
  • jzdzhiyun
  • jzdzhiyun
  • 2013年07月01日 23:09
  • 2064

sqlserver进程死锁的解决办法(一)

之前查了很多资料,一般都是在select 语句添加with(nolock)即可,但是如果是调用一些源码jar包,可是包里面的方法没有添加with(nolock),那么久没有办法了,例如之前我做工工作流...
  • u010408365
  • u010408365
  • 2015年11月22日 14:57
  • 1041

一次查找sqlserver死锁的经历

查找bug是程序员的家常便饭,我身边的人喜欢让用户来重现问题。当然他们也会从正式服务器上下载错误log,然后尝试分析log,不过当错误不是那种不经思考就可识别的情况,他们就会将问题推向用户,甚至怪罪程...
  • u010408365
  • u010408365
  • 2015年11月11日 16:39
  • 1974

sql server中高并发情况下 同时执行select和update语句死锁问题 (一)

最近在项目上线使用过程中使用SqlServer的时候发现在高并发情况下,频繁更新和频繁查询引发死锁。通常我们知道如果两个事务同时对一个表进行插入或修改数据,会发生在请求对表的X锁时,已经被对方持有了。...
  • lishehe
  • lishehe
  • 2014年12月31日 00:39
  • 29862

SqlServer 并发事务:死锁跟踪(三)6种跟踪死锁的方法总结

方法一:打开profiler跟踪事件 locks: deadlock graph 方法二:打开1222或者1204标志记录死锁,在sqlserver日志查看 DBCC TRACEON...
  • kk185800961
  • kk185800961
  • 2015年01月07日 22:51
  • 8515
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SQL Server死锁的解除方法
举报原因:
原因补充:

(最多只允许输入30个字)