请问高手如何跟踪资源死锁的原因,并且如何解决资源死锁,因为只是sp_lock,sp_who,查不到哪个程序死锁了资源,而且不能写个SQL脚本来解决资源死锁,请高手指教,如何自动化解决这一问题,谢谢!!!1

解决方案 »

  1.   

    use   master
    go
    declare   @spid   int
    --查询出死锁的SPID
    select   @spid=blocked
    from   (select   *   from   sysprocesses   where     blocked>0   )   a   
    where   not   exists(select   *   from   (select   *   from   sysprocesses   where     blocked>0   )   b   
    where   a.blocked=spid)
    --输出引起死锁的操作
    DBCC   INPUTBUFFER   (@spid)
    --exec   sp_who2 
      

  2.   

    --KILL引起死锁的进程
    exec   ('   kill       '   +   @spid)
      

  3.   

    itblog(i like i do) 
    查询死锁进程的 sql 语句看不懂, 请教一下

      

  4.   

    我知道 用KILL,但不好,有没有重新分配SQL SERVER内存的SQL 语句呀,重新分配页内存也可以释放资源的
      

  5.   

    softwarewander() :select   @spid=blocked
    from   (select   *   from   sysprocesses   where     blocked>0   )   a   
    where   not   exists(select   *   from   (select   *   from   sysprocesses   where     blocked>0   )   b   
    where   a.blocked=spid)这个语句的意思是,从a里取得blocked的spid,而这个spid不在被阻塞的进程列表中,基本上这个spid就是阻塞的源头(因为它阻塞了别人但自己没被阻塞)KILL是最简单(粗暴)的做法,至于资源分配问题,貌似SQL会自动回收的,还是等待达人的确定性意见吧