2011-06-09 191 views
3

我记录了ASP.NET应用程序抛出的异常。“死锁受害者”在交易中,如何改变优先权?

消息:事务(进程ID 56) 在锁上死锁了|通讯 缓冲区资源与另一个进程 并已被选为死锁 受害者。重新运行交易。

我确定它的原因是我直接在SSMS中在同一时间在应用程序中查询的表中运行selects

所以现在我的问题是:

  • 我可以改变优先级SQL-Server选择 “僵局受害者”?我想选择“我自己”(SSMS)作为死锁受害者,而不是ASP.NET,因为它是一个时间关键型应用程序,对于我来说重新运行手动查询比让用户接受错误更容易。

在此先感谢您。

回答

5

SET DEADLOCK_PRIORITY让您微调优先

您可以在SSMS会话指定此(每查询窗口),或全局:

Tools..Options..etc

+0

谢谢。这意味着我可以将其更改为“Low”以降低SSMS查询的优先级?这对我有用。是否有其他选择来优化死锁优先级?我读过SQL-Server在默认情况下回滚事务时选择死锁受害者。那是对的吗? – 2011-06-09 08:56:00

+0

@Tim Schmelter:对于SSMS查询的“低”。没有其他选项。按照上面的链接,受害者可以选择最少的资源来回滚:“如果两个会话具有相同的死锁优先级,则SQL Server实例会选择会以死锁牺牲品的形式回滚的会话,并且成本较低。”干杯 – gbn 2011-06-09 09:46:22

+0

在MS Dynamics NAV的诅咒不要让它在C/AL代码中被改变。如果它在用户和无人参与进程之间(可以在失败时重试),我宁愿无人参与的进程“失去”。 – 2013-04-25 19:48:06