2013-01-10 53 views
1

每天我都运行一个sql server脚本来更新我的表。每周一次我成为数据库死锁的受害者。有几个人可以访问数据库,他们都知道他们不应该在更新数据库时访问数据库。但有人在更新过程中访问数据库,我们发生死锁。有没有办法避免成为僵局的受害者?我听说过死锁优先。如果我将死锁优先级设​​置为10,会有帮助吗?是否有任何性能问题或使用死锁优先级的后果?避免成为数据库死锁的受害者

+0

在开始进程之前独占锁定数据库。这将保持它,所以你不会遇到死锁MSFT文章http://msdn.microsoft.com/en-us/library/ms175519(v=sql.105).aspx只要确保完成时清除锁定或失败! – xQbert

回答

1

假设其他进程的死锁优先级小于10,这应该会导致您赢得死锁解决方案。

如果会话具有不同的死锁优先级,则选择具有最低死锁优先级的会话作为死锁受害者。

http://msdn.microsoft.com/en-us/library/ms186736.aspx

当然,你总是可以运行一个脚本中删除其他用户作为更新的时间更新权利......

+0

大多数情况下,它们不会有任何死锁优先级设​​置,也没有人有权更新数据库中的任何内容。他们只有只读访问权限。使用死锁优先级有什么缺点吗? –

+0

@LitonUddin:如果他们不更新数据,可以考虑他们是否可以使用READ UNCOMMITTED隔离级别。这对他们的任务来说可能是合适的(取决于他们正在阅读的内容和更新的性质),并提供一个干净的解决方案来避免死锁。如果使用正确,我不知道使用DEADLOCK PRIORITY的缺陷。如果多个团队都认为他们当然应该拥有最高优先级,那么这是行不通的。 –

0

几个人可以访问数据库,他们都知道他们是 不应该访问数据库,而它正在更新

为什么不把你的数据库放在单U ser,做你的更新,并在一次交易中恢复为多用户?

Raj