SQL SEVER 死锁// 解除死锁

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

原文地址:https://www.cnblogs.com/meimao5211/p/3341053.html