`
talentkep
  • 浏览: 101463 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

SQL server p_lockinfo

阅读更多

USE [master]

GO

/****** 对象:  StoredProcedure [dbo].[p_lockinfo]    脚本日期: 12/19/2013 15:39:01 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

 

/*--处理死锁

 

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

 

因为是针对死锁的,所以如果有死锁进程,只能查看死锁进程

 

当然,你可以通过参数控制,不管有没有死锁,都只查看死锁进程

 

感谢: caiyunxia,jiangopen 两位提供的参考信息

 

*/

 

/*--调用示例

 

exec p_lockinfo

 

--*/

 

ALTER proc [dbo].[p_lockinfo]

 

@kill_lock_spid bit=0,   --是否杀掉死锁的进程,1 杀掉, 0 仅显示

 

@show_spid_if_nolock bit=1 --如果没有死锁的进程,是否显示正常进程信息,1 显示,0 不显示

 

as

 

set nocount on

 

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 @count>0

 

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 @@rowcount=0 insert #t1(a) values(null)

 

    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)

 

    if @@rowcount=0 insert #t1(a) values(null)

 

    set @i=@i+1

 

   end

 

select a.*,进程的SQL语句=b.EventInfo

 

from #t a join #t1 b on a.id=b.id

 

order by 进程ID

 

end

 

set nocount off

 

分享到:
评论

相关推荐

    sqlserver死锁处理

    本案例中提供的存储过程 `p_lockinfo` 就是一种有效的检测死锁的方法。该存储过程通过查询 `sysprocesses` 表来收集当前所有进程的信息,并根据这些信息来判断是否存在死锁。 ##### 2. 处理死锁 一旦检测到死锁,...

    SQL Server死锁的解除方法

    1. 使用Create proc p_lockinfo命令来创建一个存储过程,以便快速查询死锁的进程信息。 2. 使用@kill_lock_spid bit=1命令来杀掉死锁的进程。 3. 使用@show_spid_if_no_lock bit=1命令来显示死锁的进程信息。 4. ...

    Sqlserver死锁处理(比较好用)

    exec p_lockinfo 0,1 --*/ create proc p_lockinfo @kill_lock_spid bit=1, --是否杀掉死锁的进程,1 杀掉, 0 仅显示 @show_spid_if_nolock bit=1 --如果没有死锁的进程,是否显示正常进程信息,1 显示,0 不显示

    sql处理数据库锁的存储过程分享

    邹建 2004.4 代码如下: /*–调用示例 exec p_lockinfo1 –*/ alter proc p_lockinfo1 @kill_lock_spid bit=1, –是否杀掉死锁的进程,1 杀掉, 0 仅显示 @show_spid_if_nolock bit=1 –如果没有死锁的进程,是否显示...

    查找sqlserver查询死锁源头的方法 sqlserver死锁监控

    此外,还可以创建一个存储过程`p_lockinfo`,该过程不仅能够显示死锁信息,还可以根据参数选择是否杀死死锁进程: ```sql create proc p_lockinfo @kill_lock_spid bit=1, --是否杀掉死锁的进程,1 杀掉, 0 仅显示 @...

    解决死锁方法

    1. 使用`exec master.dbo.p_lockinfo 0, 0`语句查询死锁的进程,不显示正常的进程。 2. 使用`exec master.dbo.p_lockinfo 1, 0`语句查询死锁的进程,不显示正常的进程。 死锁的解决方法 1. 使用`Create proc p_...

    sql server 2000阻塞和死锁问题的查看与解决方法

    3. **编写自定义脚本**:如示例代码所示,创建自定义存储过程`p_lockinfo`,该过程可以显示当前的阻塞和死锁情况,甚至可以根据需要杀死指定的进程。 4. **调整事务管理**:优化事务设计,避免长时间事务和不必要的...

    SQL语法大全

    SQL语法大全 SQL语法大全 1. ASP与Access数据库连接: dim conn,mdbfile mdbfile=server.mappath("数据库名称.mdb") set conn=server.createobject("adodb.connection") conn.open "driver={microsoft access ...

    CentOS7.2.1511 gcc4.8.5 通过编译的 tfs2.2.16

    if (__gnu_cxx::abs(info_.version_ - info.version_) &lt;= VERSION_AGREED_MASK)//version agreed ^ client_request_server.cpp:167:21: error: 'abs' is not a member of '__gnu_cxx' stat[3] = __gnu_cxx::abs...

    MySQL双主互备+keepalived 实现流程

    mysql -u root -p123456 -e "show variables" | egrep "server_id|relay_log|relay_log_info_file|read_only" ``` - **创建复制账号**:在主服务器上创建用于复制的账号。 ```shell grant replication slave on ...

    sqlmap (懂的入)

    [hh:mm:26] [INFO] testing sql injection on GET parameter 'id' [hh:mm:26] [INFO] testing numeric/unescaped injection on GET parameter 'id' [hh:mm:26] [INFO] confirming numeric/unescaped injection on...

    Linux安装nginx/mysql/php/zabbix

    ./configure --prefix=/opt/platform/zabbix --sysconfdir=/etc/zabbix --localstatedir=/var/lib/zabbix --mandir=/usr/share/man --infodir=/usr/share/info --with-libdir=lib64 --enable-server --enable-proxy...

    BobBuilder_app

    Splitting a page in b+tree has to fix parent nodes and children so effectively will lock the tree for the duration, so parallel updates are very very difficult and have spawned a lot of research ...

Global site tag (gtag.js) - Google Analytics