VIEW反复被应用端命令死锁

VIEW repeatedly deadlocked by application-side commands

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

运行 跟踪和抓取死锁图显示竞争的 DELETE 语句来自应用程序(它不更新记录;而是删除和插入)。

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

VIEW 在同一个表上多次递归地进行外部联接,以创建记录的链接历史记录。我怀疑这是使 VIEW 过于复杂而无法逃避锁定时间的功能。它似乎工作了半天,然后会一直僵持在其他人身上。

这仅仅是一个容量问题,还是有更好的方法来构建报告结构来解决僵局问题?

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