查看当前进程,或死锁进程,并能自动杀掉死进程

奥利奥

奥利奥

2016-01-29 16:26

查看当前进程,或死锁进程,并能自动杀掉死进程,查看当前进程,或死锁进程,并能自动杀掉死进程
 

/*--处理死锁

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/sqlserver/)

 查看当前进程,或死锁进程,并能自动杀掉死进程

 因为是针对死的,所以如果有死锁进程,只能查看死锁进程
 当然,你可以通过参数控制,不管有没有死锁,都只查看死锁进程

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/sqlserver/)

--邹建 2004.4--*/

/*--调用示例

 exec p_lockinfo
--*/
create proc p_lockinfo
@kill_lock_spid bit=1,  --是否杀掉死锁的进程,1 杀掉, 0 仅显示
@show_spid_if_nolock bit=1 --如果没有死锁的进程,是否显示正常进程信息,1 显示,0 不显示
as
declare @count int,@s nvarchar(1000),@i int
select 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_address
into #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=1
begin
 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
end

if @count0
begin
 create table #t1(id int identity(1,1),a nvarchar(30),b Int,EventInfo nvarchar(255))
 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
   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
end
go

 
展开更多 50%)
分享

猜你喜欢

查看当前进程,或死锁进程,并能自动杀掉死进程

SQLServer
查看当前进程,或死锁进程,并能自动杀掉死进程

隐藏当前进程

编程语言 网络编程
隐藏当前进程

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

如何杀死oracle死锁进程

电脑网络
如何杀死oracle死锁进程

如何杀掉带锁的oracle进程

编程语言 网络编程
如何杀掉带锁的oracle进程

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

ps查看进程命令用法

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
ps查看进程命令用法

四种方法实现VC枚举系统当前进程

编程语言 网络编程
四种方法实现VC枚举系统当前进程

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

《崩坏学园2》装备搭配技巧心得

《崩坏学园2》装备搭配技巧心得

ORACLE优化器

ORACLE优化器
下拉加载更多内容 ↓