Sql 视图被应用程序端命令反复死锁

Sql 视图被应用程序端命令反复死锁,sql,sql-server-2008,tsql,view,database-deadlocks,Sql,Sql Server 2008,Tsql,View,Database Deadlocks,我有一个模式绑定视图(SSMS 2008 R2),它运行一组由前端应用程序维护和更新的表。本周早些时候,在部署更新应用程序之后,尽管视图在Dev-thru Staging中成功运行,但每次在Prod中运行时都会突然死锁 运行跟踪并抓取死锁图显示竞争的DELETE语句来自应用程序(它不更新记录,而是删除和插入) Edit1:死锁是由与IX级锁竞争的应用程序端命令引起的。视图发出S级锁,但相互竞争的命令继续死锁,视图查询始终是牺牲品进程。将隔离设置为“读取未提交”无法解决此问题 视图在同一个表上递归

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

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

Edit1:死锁是由与IX级锁竞争的应用程序端命令引起的。视图发出S级锁,但相互竞争的命令继续死锁,视图查询始终是牺牲品进程。将隔离设置为“读取未提交”无法解决此问题

视图在同一个表上递归地外部连接多次,以创建记录的链接历史。我怀疑这是使视图过于复杂的功能,无法避开锁的计时。它似乎工作了半天,然后会一直在其他人身上陷入僵局


这仅仅是一个容量问题吗,或者,有没有更好的方法来构建报告结构来解决死锁问题?

如果视图中出现了大量死锁,那么将其分解为更多更简单的视图可能是值得的——如果绑定模式的视图具有从多个表中提取的索引,那么它也可能特别容易被锁定问题。

这里挥手太多了,给我们看看代码。从视图定义开始,然后是其支持表及其索引/键的定义。问题最终与应用程序与数据库表的接口方式有关。我不确定你说的“我们”是谁(Ed Green在回答这一问题时做了一次坚定的尝试,这确实是我尝试过的第一件事)。供将来参考-即使在读取未提交的情况下也会出现死锁。应用程序被配置为锁定任何和所有事务的(未分区的)表,这意味着这本身不是数据库问题,而是我们工作环境的一个特性。有时解决方案并不像向我们展示代码那样简单。