我正在进行一些涉及将一批记录插入到Sql数据库中的工作。批次的大小会有所变化,但是为了说明问题,我们可以说每5秒钟5000个记录。实际上可能会少一些。多个进程将写入此表,没有任何内容从中读取。
在快速测试期间我发现,在整个批量插入周围使用SqlTransaction似乎可以提高性能。
例如:
我对回滚更改的能力不感兴趣,所以我原本并没有考虑使用事务,但是似乎使用事务可以提高性能。如果我移除这个事务代码,我的插入操作时间会从300毫秒增加到大约800毫秒!
这是什么逻辑?因为我的理解是,事务仍然将数据写入数据库,但是在提交之前锁定记录。我本来期望这会有一些开销……
我希望找到最快的插入方式。
在快速测试期间我发现,在整个批量插入周围使用SqlTransaction似乎可以提高性能。
例如:
SqlTransaction trans = Connection.BeginTransaction()
myStoredProc.Transaction = trans;
sampleData.ForEach(ExecuteNonQueryAgainstDB);
transaction.Commit();
我对回滚更改的能力不感兴趣,所以我原本并没有考虑使用事务,但是似乎使用事务可以提高性能。如果我移除这个事务代码,我的插入操作时间会从300毫秒增加到大约800毫秒!
这是什么逻辑?因为我的理解是,事务仍然将数据写入数据库,但是在提交之前锁定记录。我本来期望这会有一些开销……
我希望找到最快的插入方式。
trans.IsolationLevel = IsolationLevel.Chaos
(最低级别),这样你的事务就不会锁定其他并发事务。 - Albireo