none
关于sp_delete_job产生死锁的问题 RRS feed

  • 问题

  • 创建一个作业,如果将作业设置为完成后自动删除(delete_level设置为1),则一般情况下会自动删除,当也有例外的情况,会导致死锁,比如指定一个时间13:25:30,执行一条SQL语句后,完成后自动删除,如果创建20-40个同样的作业,执行时间都是13:25:30,那将会发生死锁,日志中会有记录,部分作业将不会执行,请问该如何解决该问题!
    • 已移动 Sheng Jiang 蒋晟 2009年9月25日 0:53 SQL Server问题 (发件人:ADO.NET 与 LINQ)
    2009年9月24日 8:17

答案

  • 20-40个一样的作业,执行的内容和时间都是一样?

    你在考验sql?

    delete job 实际上也在数据库里面删除一些记录(msdb库内的sysjob表等),如果并发太多的话还是可能发生死锁的。

    这样想 死锁就不是不可能发生了

    当然job内容也可能引起死锁。如果都是查询,死锁的可能不大。

    你吧死锁的错误内容拿来看看,估计是删除job的时候太多一起死锁了。


    family as water
    2009年9月25日 1:28
  • Also involves sysjobschedules, sysjobsteps, ..., huge chance of deadlock.
    2009年9月25日 1:34
  • 1.如果作业里面只放select语句,业务允许的话可以加上with(nolock); 2005以上的,可以改成快照隔离级别执行,降低业务引起死锁的概率
    2.是不是可以考虑传SQL语句给作业去执行,而不是频繁的删除、创建作业呢;降低系统表引起死锁的概率
    2009年9月25日 1:51
    版主

全部回复

  • ...   死锁的不是作业同时运行 是彼此牵扯太多吧...  难道不能放在一个大作业中么


    恭喜自己5星用户达成
    2009年9月24日 8:25
  • 没有牵扯,我可以只放最简单的select语句,一样会死锁。
    2009年9月24日 8:28
  • 20-40个一样的作业,执行的内容和时间都是一样?

    你在考验sql?

    delete job 实际上也在数据库里面删除一些记录(msdb库内的sysjob表等),如果并发太多的话还是可能发生死锁的。

    这样想 死锁就不是不可能发生了

    当然job内容也可能引起死锁。如果都是查询,死锁的可能不大。

    你吧死锁的错误内容拿来看看,估计是删除job的时候太多一起死锁了。


    family as water
    2009年9月25日 1:28
  • Also involves sysjobschedules, sysjobsteps, ..., huge chance of deadlock.
    2009年9月25日 1:34
  • 1.如果作业里面只放select语句,业务允许的话可以加上with(nolock); 2005以上的,可以改成快照隔离级别执行,降低业务引起死锁的概率
    2.是不是可以考虑传SQL语句给作业去执行,而不是频繁的删除、创建作业呢;降低系统表引起死锁的概率
    2009年9月25日 1:51
    版主