2016-09-16 43 views
0

我有一个模式绑定视图(SSMS 2008 R2)运行在由前端应用程序维护和更新的一组表上。本周早些时候,在部署更新应用程序之后,尽管在开发阶段通过成功运行,每次在Prod中运行时,视图突然死锁 - 受害者。VIEW通过应用程序端命令反复死锁

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

编辑1:死锁是由与IX级锁定竞争的应用程序端命令引起的。 VIEW发行S级锁,但竞争性命令继续死锁,VIEW查询一直是受害者进程。将隔离设置为'read uncommitted'不能解决问题。

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

这是一个简单的能力问题,还是有更好的方法来构建报告结构来弥补死锁问题?

+0

这里有太多的挥手,向我们展示代码。从视图定义开始,然后定义支持表及其索引/键。 – RBarryYoung

回答

0

如果在视图中出现很多死锁,可能需要将其分解为大量更简单的视图 - 模式绑定视图具有从多个表中绘制的索引时,它也可能特别倾向于锁定问题。