技术开发 频道

KILL死锁的存储过程

  【IT168技术文档】

  死锁可以查一下:

  1、sp_who 或 sp_who2

  2、Select * from sysprocesses where blocked <> 0

  3、 企业管理器->服务器->管理工具->活动->当前活动 然后把他kill掉.......

  4:SQL事件探查器,监控一下,看主要是那些处理引起的死锁.然后做相应的处理。用事件探查器new一个trace,监视一下造成你SQL Server停顿的情况.......

  最好的办法还是检查一下引起锁的原因,一般是由你的代码引起的。

  SQL事件探查器用法:开始--程序--MS SQL Server--事件探察器(SQL Profiler)--文件--新建--设置跟踪的项目...--然后数据库的调用情况就会显示出

  查看锁信息

select 进程id=req_spid,数据库=db_name(rsc_dbid),类型=case rsc_type when 1 then 'NULL 资源(未使用)'
when 2 then '数据库'
when 3 then '文件'
when 4 then '索引'
when 5 then ''
when 6 then ''
when 7 then ''
when 8 then '扩展盘区'
when 9 then 'RID(行 ID)'
when 10 then '应用程序'
end
,rsc_objid,rsc_indid
from master..syslockinfo

  killlock存储过程:

use master go create proc killspid (@dbname varchar(20)) as begin declare @SQL nvarchar(500),@temp varchar(1000) declare @spid int set @SQL='declare getspid cursor for select spid from sysprocesses where dbid=db_id('''+@dbname+''')' exec (@SQL) open getspid fetch next from getspid into @spid while @@fetch_status<>-1 begin set @temp='kill '+rtrim(@spid) exec(@temp) fetch next from getspid into @spid end close getspid deallocate getspid end

  用法:

use master exec killspid '数据库名'
0
相关文章