执行A存错过程(A存错过程的操作包括插入,更新,删除),
结果因为对于A存储某个表的操作产生了死锁,
请问死锁产生的周期多少?不是人工解除死锁,想要知道SQL自动解除死锁的时间间隔是多少?请各位高手指点下

解决方案 »

  1.   

    ,想要知道SQL自动解除死锁的时间间隔是多少?一般来说SQL会选用一个事务作为牺牲品 另外一个得以执行时间间隔应该不会太长
      

  2.   

    当 SQL Server 实例检测到两个会话发生死锁时,将选择其中一个会话作为死锁牺牲品来解决死锁。此牺牲品的当前事务将回滚,且死锁错误消息 1205 返回客户端。这样可释放由该会话所控制的所有锁,从而允许其他会话继续进行。将哪个会话选为死锁牺牲品取决于每个会话的死锁优先级:如果两个会话的死锁优先级相同,则 SQL Server 实例将回滚开销较低的会话选为死锁牺牲品。例如,如果两个会话都将其死锁优先级设置为 HIGH,则此实例便将它估计回滚开销较低的会话选为牺牲品。
    如果会话的死锁优先级不同,则将死锁优先级最低的会话选为死锁牺牲品。
    SET DEADLOCK_PRIORITY 是在执行或运行时设置,而不是在分析时设置。
      

  3.   

    我现在是要调查一个存储过程,在执行哪一步产生了死锁,因为这个存储过程关联的表太多,和系统太多,而且不知道其他系统对于这个存储过程的表也做操作,所以产生了死锁。
    产生死锁的时间段,从error文件能看到。所以想建立一个job来监视那个时间段,如果产生死锁,就把相应的产生死锁的原因给插入到表去。所以想确认下自动解除死锁的间隔时间,来设置job的执行时间
      

  4.   

    如果有日志文件的话,可以用profiler 重演一下。 看看是谁跟谁锁了。
      

  5.   

    8楼说的不是太理解,现在担心的是,执行存储过程时虽然产生了死锁,但是因为job设定时间的不合理导致,job执行时,sql的死锁已经自动解除了,也查不到思索信息了。想听听8楼的意见,这个job设定的时间多少执行比较好