我正在做一些涉及将一批记录插入Sql数据库的工作。批处理的大小会有所不同,但为了争论起见,我们可以每5秒说出5000条记录。虽然它可能会少一些。多个进程将写入此表,没有任何数据正在读取。ADO.net SqlTransaction提高了性能
我在快速测试中注意到,在整个批处理插入周围使用SqlTransaction似乎可以提高性能。
例如
SqlTransaction trans = Connection.BeginTransaction()
myStoredProc.Transaction = trans;
sampleData.ForEach(ExecuteNonQueryAgainstDB);
transaction.Commit();
我没有兴趣在回滚我的变化,所以我不会真的只是它似乎提高性能使用事务考虑的能力。如果我删除这个事务代码,我的插入从300ms到800ms左右!
这是什么逻辑?因为我的理解是事务仍将数据写入数据库,但锁定记录直到它被提交。我本来预计这会有一个开销...
我在找什么是做这个插入的最快方法。
如果你只写它,你也可以指定' trans.IsolationLevel = IsolationLevel.Chaos'(最低级别),所以你的事务不会锁定其他并发事务。 – Albireo 2011-02-23 12:58:27