博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sqlserver查看死锁进程工具脚本p_lockinfo
阅读量:6113 次
发布时间:2019-06-21

本文共 2363 字,大约阅读时间需要 7 分钟。

/* -- 处理死锁-- 查看当前进程,或死锁进程,并能自动杀掉死进程-- 因为是针对死的,所以如果有死锁进程,只能查看死锁进程-- 当然,你可以通过参数控制,不管有没有死锁,都只查看死锁进程-- 调用示例:    exec [dbo].[p_lockinfo] 0, 0*/ CREATE PROCEDURE [dbo].[p_lockinfo]    @kill_lock_spid bit = 0, --是否杀掉死锁的进程,1 杀掉, 0 仅显示    @show_spid_if_nolock bit = 0 --如果没有死锁的进程,是否显示正常进程信息,1 显示,0 不显示asdeclare @count int,@s nvarchar(1000),@i intselect [id]=identity(int,1,1), [标志],    [进程ID]=spid, [线程ID]=kpid, [块进程ID]=blocked, [数据库ID]=dbid,    [数据库名]=db_name(dbid), [用户ID]=uid, [用户名]=loginame, [累计CPU时间]=cpu,    [登陆时间]=login_time, [打开事务数]=open_tran, [进程状态]=status,    [工作站名]=hostname, [应用程序名]=program_name, [工作站进程ID]=hostprocess,    [域名]=nt_domain, [网卡地址]=net_addressinto #t from(    select 标志='死锁的进程',        spid,kpid,a.blocked,dbid,uid,loginame,cpu,login_time,open_tran,        status,hostname,program_name,hostprocess,nt_domain,net_address,        s1=a.spid,s2=0    from master..sysprocesses a join (        select blocked from master..sysprocesses group by blocked        )b on a.spid=b.blocked where a.blocked=0    union all    select '牺牲品',        spid,kpid,blocked,dbid,uid,loginame,cpu,login_time,open_tran,        status,hostname,program_name,hostprocess,nt_domain,net_address,        s1=blocked,s2=1    from master..sysprocesses a where blocked<>0    )a order by s1,s2;select @count=@@rowcount, @i=1;if @count=0 and @show_spid_if_nolock=1begin    insert #t    select 标志='正常的进程',        spid,kpid,blocked,dbid,db_name(dbid),uid,loginame,cpu,login_time,        open_tran,status,hostname,program_name,hostprocess,nt_domain,net_address    from master..sysprocesses;    set @count=@@rowcount;endif @count>0begin    create table #t1(id int identity(1,1),a nvarchar(30),b Int,EventInfo nvarchar(4000));    if @kill_lock_spid=1    begin        declare @spid varchar(10),@标志 varchar(10)        while @i<=@count        begin            select @spid=进程ID,@标志=标志 from #t where id=@i;            insert #t1 exec('dbcc inputbuffer('+@spid+')');            if @标志='死锁的进程' exec('kill '+@spid);            set @i=@i+1;        end    end    else    while @i<=@count    begin        select @s='dbcc inputbuffer('+cast(进程ID as varchar)+')' from #t where id=@i;        --print @s;        insert #t1 exec(@s);        set @i=@i+1;    end    select a.*,[进程的SQL语句]=b.EventInfo from #t a join #t1 b on a.id=b.id order by a.id;end GO

 

转载于:https://www.cnblogs.com/chriskwok/p/9717996.html

你可能感兴趣的文章
[leetcode]Next Permutation @ Python
查看>>
JAVA(2)——JDBC
查看>>
php heredoc 与 nowdoc
查看>>
DBA_Oracle DBA常用表汇总(概念)
查看>>
第30周二
查看>>
数学类杂志SCI2013-2014影响因子
查看>>
实用的树形菜单控件tree
查看>>
最近公共祖先(lca)
查看>>
【WP 8.1开发】文件选取器的使用方法
查看>>
Java实现BASE64编解码
查看>>
【Java】java基本知识
查看>>
之前学习wordpress的几张图片
查看>>
RT-Thread下的串口驱动程序分析【转载】
查看>>
UITableView的UITableViewStyleGrouped
查看>>
ecshop中getAll ,getOne ,getRow的区别
查看>>
luov之SMTP报错详解
查看>>
软件概要设计做什么,怎么做
查看>>
dwr
查看>>
java的特殊符号
查看>>
word2010中去掉红色波浪线的方法
查看>>