Sql server 同一表中的两个INSERT之间的死锁

Sql server 同一表中的两个INSERT之间的死锁,sql-server,entity-framework,azure-sql-database,deadlock,Sql Server,Entity Framework,Azure Sql Database,Deadlock,我们刚刚开始解决系统中发生的死锁。除了最不常见的情况:两个INSERT事务之间在同一个表中出现死锁之外,我们已经跟踪了大部分情况 是什么导致了僵局?我们拥有的信息: 这种情况很少发生:过去一个月发生了3次;我们不能强迫死锁发生在我们的开发环境上。 M_DocumentsOrder表有60k行 xml显示的是pagelock,而不是在其他死锁情况下常见的keylock 客户端使用EntityFramework连接到数据库,并检查代码,这似乎很简单。然后添加。保存更改如下: using (MyTra

我们刚刚开始解决系统中发生的死锁。除了最不常见的情况:两个INSERT事务之间在同一个表中出现死锁之外,我们已经跟踪了大部分情况

是什么导致了僵局?我们拥有的信息:

这种情况很少发生:过去一个月发生了3次;我们不能强迫死锁发生在我们的开发环境上。 M_DocumentsOrder表有60k行 xml显示的是pagelock,而不是在其他死锁情况下常见的keylock 客户端使用EntityFramework连接到数据库,并检查代码,这似乎很简单。然后添加。保存更改如下:

using (MyTransaction context = new MyTransaction())
{
        ...set data
        context.DocumentsOfOrder.Add(document);
        context.SaveChanges();
}
以下是死锁xml:

更新[M_DocumentsOfOrder]设置[MODIFIED]=GETUTCDATE,从[M_DocumentsOfOrder].ID=M_DocumentsOfOrder.I插入 更新[M_DocumentsOfOrder]集合CREATED=GETUTCDATE,MODIFIED=GETUTCDATE,从[M_DocumentsOfOrder].ID=Inserted.I插入 未知的 未知的 @0 bigint,@1 bigininsert[dbo].[M_DocumentsOfOrder][Document_ID],[Order_ID],[CREATED],[MODIFIED]值@0,@1,NULL,NULL从[dbo].[M_DocumentsOfOrder]中选择[ID],其中@@ROWCOUNT 0和[ID]=scope_identity 更新[M_DocumentsOfOrder]设置[MODIFIED]=GETUTCDATE,从[M_DocumentsOfOrder].ID=M_DocumentsOfOrder.I插入 更新[M_DocumentsOfOrder]集合CREATED=GETUTCDATE,MODIFIED=GETUTCDATE,从[M_DocumentsOfOrder].ID=Inserted.I插入 未知的 未知的 @0 bigint,@1 bigininsert[dbo].[M_DocumentsOfOrder][Document_ID],[Order_ID],[CREATED],[MODIFIED]值@0,@1,NULL,NULL从[dbo].[M_DocumentsOfOrder]中选择[ID],其中@@ROWCOUNT 0和[ID]=scope_identity
问题是什么?@FrankYuchengGu是什么导致了这种罕见的僵局?保存条目的代码似乎正常。编辑它以使问题明确。对此我很抱歉。尚未提及正在使用的数据库,也未提供任何代码。死锁涉及到该表上的触发器。请发布完整的表DDL,包括索引和触发器定义。是。每个定义的2条insert语句之间不会发生死锁-2条insert语句不会死锁。它们上的触发器可能会导致死锁,但这是您需要提供的信息。提出了什么问题?@FrankYuchengGu是什么导致了这种罕见的死锁?保存条目的代码似乎正常。编辑它以使问题明确。对此我很抱歉。尚未提及正在使用的数据库,也未提供任何代码。死锁涉及到该表上的触发器。请发布完整的表DDL,包括索引和触发器定义。是。每个定义的2条insert语句之间不会发生死锁-2条insert语句不会死锁。它们上的触发器可能会导致死锁,但这是您需要提供的信息。