在密钥上的SQL Server 2005死锁

问题描述:

我有一个uniqueidentifier列上具有聚集主键索引的表。我有一个运行以下伪功能的程序:在密钥上的SQL Server 2005死锁

begin transaction 
read from table 1 
insert into table 2 
update table 1 with pointer to table 2 record 
commit transaction 

,直到同样的程序是从其他地方同时执行这一切工作正常。一旦发生这种情况,其中一个执行会在主键上每次都死锁并终止。

任何想法我可以做什么来防止这种情况,简称“不同时运行”?事务正在READ COMMITTED隔离级别运行。

  1. 增加事务隔离级别eulerfx.myopenid.com的暗示。

  2. 使用sql“mutexes”来简单地等待一个过程完成,然后再让另一个运行。 http://weblogs.sqlteam.com/mladenp/archive/2008/01/08/Application-Locks-or-Mutexes-in-SQL-Server-2005.aspx

  3. 使用快照隔离级别。取决于你的应用程序可以工作。然而这会带来其他问题。 http://msdn.microsoft.com/en-us/library/ms189050.aspx

数2需要更多的代码变化超过1虽然。但有时你不能只是增加隔离级别。