繁体   English   中英

Quartz.Net-死锁

[英]Quartz.Net - Deadlocking

我正在使用一个调度程序,该程序每30秒检查一次数据库,以查看调查表中的任何更改。 调查表包含诸如名称,WhenDue(为简单起见)之类的字段。

这是我的逐步操作-我实际上使用Quartz Job,该设置设置为每30秒触发一次以添加更多作业。

  • 加载上次提取日期/时间后已修改的所有调查
  • 遍历他们并添加新的或更新现有的作业/触发器

当我第一次启动程序时,它运行良好,可以进行所有调查等。

但是,如果我进行调查并进行了更改,则我的程序会进行更改,但是会引发异常

Quartz.JobPersistenceException: Couldn't acquire next trigger: Couldn't retrieve trigger: Transaction (Process ID 59) was deadlocked on lock resources with another process and has been chosen as the deadlock victim.

这不确定为什么会这样。 欢迎提出任何建议,我现在花了几个小时试图对其进行跟踪。

看起来这是一个SQL异常,Quartz只是将其传递到堆栈中。 尝试使用NOLOCK选项选择数据:

select dbo.Table.Column
from dbo.Table with(NOLOCK)
where dbo.Table.OtherColumn = @Param;

Google以获得有关NOLOCK的更多信息。 您很可能需要重新设计数据库架构或使用NOLOCK(不一定是一件坏事)。

我相信当您使用ADO Job Store时,这是Quartz.Net的已知问题。 有一些建议似乎可以缓解该问题,例如将UpdateLockRowSemaphore与SQLServer一起使用或将adojobstore移至单独的数据库。

下面是线程从谷歌网上论坛邮寄列表中讨论这个问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM