VIEW因应用程序端命令而反复死锁

时间:2016-09-16 21:40:13

标签: sql sql-server-2008 tsql view database-deadlocks

我有一个模式绑定视图(SSMS 2008 R2)运行由前端应用程序维护和更新的一组表。本周早些时候,在部署更新应用程序之后,尽管在Dev thru Staging中成功运行,但每次在Prod中运行时,视图突然出现死锁 - 受害者。

运行跟踪并抓住死锁图表显示竞争的DELETE语句来自应用程序(它不会更新记录;而是DELETE和INSERT)。

Edit1:死锁是由具有IX级锁的竞争应用程序端命令引起的。 VIEW发出S级锁,但竞争命令继续死锁,VIEW查询一直是受害者进程。将隔离设置为'读取未提交的'无法解决问题。

VIEW在同一个表上递归外连接多次,以创建记录的链接历史记录。我怀疑这是使VIEW过于复杂以逃避锁定时间的功能。它似乎工作了半天,然后将持续陷入其他人的僵局。

这只是一个容量问题,还是有更好的方法来构建可以解决死锁问题的报告结构?

1 个答案:

答案 0 :(得分:0)

如果您在视图中遇到很多死锁,那么将其分解为更多更简单的视图可能是值得的 - 其中模式绑定视图具有从多个表中绘制的索引,它也可能特别容易锁定问题。