none
job 跟踪检查死锁 RRS feed

  • 问题

  • 第一步:
     CREATE TABLE DeadLockLog ( id int IDENTITY (1, 1) NOT NULL, LogDate DATETIME, ProcessInfo VARCHAR(10), ErrorText VARCHAR(MAX) )
    第二步:
     --新建临时表
    IF OBJECT_ID('tempdb.dbo.#ErrorLog') IS Not Null
    DROP TABLE #ErrorLog
    CREATE TABLE #ErrorLog (Id int IDENTITY (1, 1) NOT NULL, a DATETIME, b VARCHAR(10), c VARCHAR(MAX))
    --将当前日志记录插入临时表
    INSERT INTO #ErrorLog EXEC master.dbo.sp_readerrorlog
    --将死锁信息插入用户表
    insert DeadLockLog select a, b, c from #ErrorLog
        where id >= (select MAX(id) from #ErrorLog WHERE c Like '%Deadlock encountered%')
    测试数据:

    第三步: 创建数据表create deadlock_data(a int)
    开启一个SSMS
    begin transaction --commit,rollback --此时数据没有提交
    insert into deadlock_data values(1)
    第四步:
    开启一个SSMS
    select * from deadlock_data
    ---此时会产生锁
    第五步:
    在开启一个分析器
    select a, b, c from #ErrorLog
        where id >= (select MAX(id) from #ErrorLog WHERE c Like '%Deadlock encountered%')
       疑问?
       为什么此时没有任何锁的信息呢?
    打开SQL日志里面也没有看到锁的信息呢? 请指导一下谢谢


    星光总能为我指引方向
    2011年7月4日 9:01

答案

  • 只有出现死锁,并且sql 认定是死锁后,才会记录到 errorlog中

    而且你也要等出现死锁后在执行插入死锁的语句,才能找到死锁记录。

     

    建议你使用sp_lock 检查是否有锁信息!!!


    family as water
    2011年7月5日 12:47
  • 即使DBCCTRACEON (1204,1222,-1
    也没有解决问题啊,能给给解决问题的方案?


    星光总能为我指引方向
    Trace flag 1204 will not solve your deadlock issue, it just logs details of deadlock. You have to solve it in your app based on logged info.
    2011年7月5日 12:53

全部回复

  • 测试之前 载SSMS 里面

    DBCC TRACEON (3605,1204,1222,-1

     DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。


    星光总能为我指引方向
    2011年7月4日 9:17
  • Don't need 3605 because sql will log deadlock details in sql server log.
    2011年7月4日 21:46
  • 即使DBCCTRACEON (1204,1222,-1
    也没有解决问题啊,能给给解决问题的方案?


    星光总能为我指引方向
    2011年7月5日 5:11
  • 只有出现死锁,并且sql 认定是死锁后,才会记录到 errorlog中

    而且你也要等出现死锁后在执行插入死锁的语句,才能找到死锁记录。

     

    建议你使用sp_lock 检查是否有锁信息!!!


    family as water
    2011年7月5日 12:47
  • 即使DBCCTRACEON (1204,1222,-1
    也没有解决问题啊,能给给解决问题的方案?


    星光总能为我指引方向
    Trace flag 1204 will not solve your deadlock issue, it just logs details of deadlock. You have to solve it in your app based on logged info.
    2011年7月5日 12:53