Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server 2008死锁问题_Sql Server_Tsql_Deadlock - Fatal编程技术网

Sql server SQL Server 2008死锁问题

Sql server SQL Server 2008死锁问题,sql-server,tsql,deadlock,Sql Server,Tsql,Deadlock,我陷入了一个死锁问题,我正在努力寻找根本原因…死锁图表明UPDATE语句成为SELECT语句的牺牲品。。。 让我困惑的是UPDATE语句正在试图获取UPDATE语句中从未引用过的其他表的索引 这就是我的UPDATE语句的样子 UPDATE Table set col1 = @P1 where col2 = @P2 此语句在col2索引上获取了一个X锁,但也尝试在与UPDATE语句无关的其他表中定义的列上获取索引 赢得死锁情况的SELECT语句与update语句中的表或索引无关,而是试图在u

我陷入了一个死锁问题,我正在努力寻找根本原因…死锁图表明UPDATE语句成为SELECT语句的牺牲品。。。 让我困惑的是UPDATE语句正在试图获取UPDATE语句中从未引用过的其他表的索引

这就是我的UPDATE语句的样子

UPDATE Table set col1 = @P1  where col2 = @P2 
此语句在col2索引上获取了一个X锁,但也尝试在与UPDATE语句无关的其他表中定义的列上获取索引


赢得死锁情况的SELECT语句与update语句中的表或索引无关,而是试图在update语句中的表上获取索引。最终导致死锁。

更新事务/锁将包括以下内容:

  • 触发
  • 外键验证(col1是fk吗?)
  • 检查约束(在col1上使用udf)
  • 索引视图(使用table.col1或table.col2)

其中任何一个都可能导致明显不相关的表具有锁,更新事务/锁将包括以下内容:

  • 触发
  • 外键验证(col1是fk吗?)
  • 检查约束(在col1上使用udf)
  • 索引视图(使用table.col1或table.col2)

除了这些优秀的答案之外,任何一个都可能导致明显无关的表有一个锁

,要考虑的是一个选择通常会获得一个共享的读锁,它允许一系列的选择来维护资源上的共享锁。update语句可能永远没有机会被授予独占锁。通常情况下,虽然引擎在防止这种饥饿方面做得很好,但是如果您在事务中使用另一条语句的更新,那么这可能会使问题复杂化。如果是这种情况,则提供事务中发生的更多细节。

< P>除了其他优秀的答案之外,要考虑的是一个选择通常会获得一个共享的读锁,它允许一系列的选择来维护资源上的共享锁。update语句可能永远没有机会被授予独占锁。通常情况下,虽然引擎在防止这种饥饿方面做得很好,但是如果您在事务中使用另一条语句的更新,那么这可能会使问题复杂化。如果是这种情况,请提供事务中发生的情况的详细信息。

您可能需要检查约束和依赖关系。更新锁定的表可能具有约束或触发器,或者在修改更新表时对其进行修改。您可能需要检查约束和依赖项。更新锁定的表可能有一个约束或触发器,或者在修改更新表时对其进行修改。第一句话描述了一个“livelock”或+1 Nice链接。在某些情况下,这些检测机制将失败,您必须添加锁定提示。例如,一个事务包含一个select,然后是一个update(共享锁试图被ugpraded为exclusive),因此您需要添加一个查询提示,以使select语句从get-go获取一个独占锁。第一句话描述了一个“livelock”或+1 Nice链接。在某些情况下,这些检测机制将失败,您必须添加锁定提示。例如,一个事务包含一个select,然后是一个update(共享锁试图被ugpraded为exclusive),因此您需要添加一个查询提示,以使select语句从get go中获得一个exclusive锁。