我正在使用一个包含来自 SQL Azure 数据库的不同表的数据集。我正在使用 transactionScope 将数据插入相关表(每个表大约 1-3 行)。在我的数据库中,每个插入操作对每个用户都是唯一的,因此永远不会有重复。
在测试场景中,我正在测试并行插入数据并在之后删除这些数据。使用 TransactionScope 进行删除操作会出现死锁。当不使用 TransactionScope 进行删除时,delete 语句有时需要长达 40 秒。所以似乎Azure在插入期间锁定了整个表,而删除必须等待......
有没有办法避免操作需要这么长时间?也许只使用行锁定或更改 transactionScope 选项?
我的交易:
var transactionOptions = new TransactionOptions();
transactionOptions.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
transactionOptions.Timeout = TransactionManager.MaximumTimeout;
using(TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew, transactionOptions))
{
InsertIntoTable1;
InsertIntoTable2;
InsertIntoTable3;
scope.Complete();
}
DeleteTable3Entity;
DeleteTable2Entity;
DeleteTable1Entity;