SQL SEVER 死锁
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 '数据库名'
死锁可以查一下:
1:sp_who 或 sp_who2
2: Select * from sysprocesses where blocked <> 0
3: 企业管理器->服务器->管理工具->活动->当前活动 然后把他kill掉。。。
4:SQL事件探查器,监控一下,看主要是那些处理引起的死锁.然后做相应的处理.
用事件探查器new一个trace,监视一下造成你sqlserver停顿的情况。。。
最好的办法还是检查一下引起锁的原因,一般是由你的代码引起的。
SQL事件探查器用法
开始--程序--MS SQLSERVER
--事件探察器(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