`
zhuyx808
  • 浏览: 122929 次
  • 性别: Icon_minigender_1
  • 来自: 快来看~天上米有灰机
社区版块
存档分类
最新评论

sqlserver获取死锁进程

阅读更多
use   master   --必须在master数据库中创建  
  go  
   
  if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[dbo].[p_lockinfo]')   and   OBJECTPROPERTY(id,   N'IsProcedure')   =   1)  
  drop   procedure   [dbo].[p_lockinfo]  
  GO  
   
  /*--处理死锁  
   
    查看当前进程,或死锁进程,并能自动杀掉死进程  
   
    因为是针对死的,所以如果有死锁进程,只能查看死锁进程  
    当然,你可以通过参数控制,不管有没有死锁,都只查看死锁进程  
   
    感谢:   caiyunxia,jiangopen   两位提供的参考信息  
   
  --邹建   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   @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   @标志='死锁的进程'   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

分享到:
评论

相关推荐

    Sqlserver分析死锁进程

    本文将详细介绍如何在SQL Server中分析死锁进程,特别是如何通过存储过程来捕捉和分析死锁信息。 ### 死锁分析存储过程 在给定的部分内容中,可以看到一个名为`sp_check_lock`的存储过程被创建,其主要目的是检查...

    SQLServler自动杀死死锁进程

    "SQLServer自动杀死死锁进程"这一话题旨在探讨如何配置SQL Server来自动检测并解决这些死锁情况,以避免系统阻塞和性能下降。 1. **死锁的基本概念**: 死锁是指两个或多个事务在执行过程中,因争夺资源而造成的一...

    查询SQL server数据库死锁存储过程

    通过上述代码,我们可以看出这个存储过程的主要功能是检测SQL Server中出现的死锁情况,并提供有关被阻塞进程的信息,包括它们正在执行的SQL语句。这对于诊断和解决SQL Server中的死锁问题非常有帮助。此外,它还...

    SQL Server死锁查询

    以上介绍了如何在SQL Server中诊断和解决死锁问题的方法,主要包括查询锁信息、查询导致死锁的SQL语句以及如何结束死锁进程。这些方法对于维护数据库系统的稳定性和提高效率具有重要意义。在实际操作中,还需要结合...

    sqlserver进程死锁关闭的方法

    - 如果无法通过其他方式解决死锁,可以考虑强制结束死锁进程。声明一个变量存储SPID,然后构建并执行`KILL`语句,如`KILL [SPID]`。但请注意,这种方法应当谨慎使用,因为它可能导致未完成的事务丢失,可能破坏数据...

    sqlserver死锁处理

    ### SQL Server 死锁处理详解 #### 一、引言 在 SQL Server 数据库系统中,当两个或多个事务在等待对方释放资源时,就会发生死锁现象。死锁不仅会降低系统的整体性能,还可能导致数据处理异常中断,严重影响业务...

    sqlserver2000中如何自动杀死死锁进程.pdf

    根据提供的文件信息,文件名为“sqlserver2000中如何自动杀死死锁进程.pdf”,并且该文档描述了如何在SQL Server 2000环境下自动检测并解决死锁问题的详细过程。以下将详细阐述该文件中的知识点。 1. 死锁的定义与...

    SqlServer查询和Kill进程死锁的语句

    首先,要查询死锁进程,可以使用以下SQL语句: ```sql select request_session_id spid, OBJECT_NAME(resource_associated_entity_id) tableName from sys.dm_tran_locks where resource_type='OBJECT' ``` 这...

    sql数据库死锁查询工具

    - 使用系统视图:许多数据库系统提供了内置视图(如SQL Server的sys.dm_tran_locks,Oracle的v$lock),用于查看当前的锁定状态,帮助找出潜在的死锁。 - 错误日志:数据库系统通常会在发生死锁时记录错误信息,通过...

    分析SQL Server 数据库中的死锁

    这个存储过程通过分析`sysprocesses`表中的数据,返回包含死锁事务的SPID(会话进程ID)和被阻塞的SPID,以及它们正在执行的SQL语句,便于快速定位问题。 #### 存储过程的使用 一旦创建了`sp_who_lock`存储过程,...

    浅析SQL SERVER中死锁.pdf

    【SQL Server中的死锁】 死锁是数据库管理系统中常见的一个问题,尤其在SQL Server中也不例外。死锁发生时,两个或多个事务互相等待对方释放资源,导致它们都无法继续执行,形成僵持状态。这种情况可能导致系统性能...

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

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

    SQLServer 中的死锁说明

    两个进程发生死锁的典型例子是:进程T1中获取锁A,申请锁B;进程T2中获取锁B,申请锁A,我们下面动手来演示一下这种情况: 1. 创建一个Database,名为InvDB。 2. 执行下面脚本创建person表并填充两条数据: 3. 在...

    sqlserver并发分析及解决办法

    ### SQL Server 并发分析及解决办法 #### 一、并发问题概述 在现代数据库管理系统中,尤其是在SQL Server这样的企业级数据库系统中,并发管理是一个非常关键的话题。并发指的是多个事务或查询同时运行的情况,这...

    分布式死锁的一个例子

    3. **资源排序和死锁检测**:在应用程序层面实现死锁检测,或者调整SQL Server的死锁检测参数,以便更早地检测和解决死锁。 4. **资源请求顺序**:确保所有进程以相同顺序请求资源,可以减少死锁的可能性。 5. **...

    浅析SQL SERVER死锁产生的原因及解决 (1).pdf

    SQL Server死锁是数据库管理系统中常见的并发问题,当两个或多个进程在执行过程中互相等待对方释放资源,而造成永久阻塞时,就产生了死锁。为了解决死锁问题,需要对死锁产生的原因有深入的理解,并且掌握相应的解决...

Global site tag (gtag.js) - Google Analytics