我正在开发一个调度程序,它每30秒检查一次数据库中的任何更改。调查表包含诸如Name、WhenDue等字段(为了简单起见)。
这里是一步一步的我所做的-我实际上使用石英作业,它设置为触发每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.
这不知道为什么会发生这种事。任何建议都是受欢迎的,我现在花了几个小时试图找到它。
发布于 2011-07-28 15:52:22
我相信当您使用ADO时,这是一个已知的Quartz.Net问题。有一些建议似乎可以缓解这个问题,比如将UpdateLockRowSemaphore与SQLServer结合使用,或者将a存储转移到单独的数据库中。
下面是讨论这个问题的groups邮件列表中的线程。
发布于 2011-07-27 23:53:30
看起来这是一个SQL异常,Quartz只是把它传递到堆栈中。尝试使用NOLOCK选项选择数据:
select dbo.Table.Column
from dbo.Table with(NOLOCK)
where dbo.Table.OtherColumn = @Param;谷歌有关NOLOCK的更多信息。很可能您需要重新设计数据库模式或使用NOLOCK(不一定是坏事)。
https://stackoverflow.com/questions/6852483
复制相似问题