在密钥上的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隔离级别运行。
答
增加事务隔离级别eulerfx.myopenid.com的暗示。
使用sql“mutexes”来简单地等待一个过程完成,然后再让另一个运行。 http://weblogs.sqlteam.com/mladenp/archive/2008/01/08/Application-Locks-or-Mutexes-in-SQL-Server-2005.aspx
使用快照隔离级别。取决于你的应用程序可以工作。然而这会带来其他问题。 http://msdn.microsoft.com/en-us/library/ms189050.aspx
数2需要更多的代码变化超过1虽然。但有时你不能只是增加隔离级别。