【发布时间】:2011-02-23 12:45:48
【问题描述】:
我正在做一些涉及将一批记录插入 Sql 数据库的工作。批处理的大小会有所不同,但为了论证,我们可以说每 5 秒有 5000 条记录。不过可能会少一些。多个进程将写入此表,没有任何内容从中读取。
我在快速测试期间注意到的是,围绕整个批处理插入使用 SqlTransaction 似乎可以提高性能。
例如
SqlTransaction trans = Connection.BeginTransaction()
myStoredProc.Transaction = trans;
sampleData.ForEach(ExecuteNonQueryAgainstDB);
transaction.Commit();
我对能够回滚我的更改不感兴趣,所以我不会真正考虑使用事务,除非它似乎可以提高性能。如果我删除此事务代码,我的插入时间将从 300 毫秒缩短到 800 毫秒左右!
这样做的逻辑是什么?因为我的理解是事务仍然将数据写入数据库但锁定记录直到它被提交。我本来预计这会产生开销......
我正在寻找的是执行此插入的最快方法。
【问题讨论】:
-
如果你只是写它,你还可以指定
trans.IsolationLevel = IsolationLevel.Chaos(最低级别),这样你的事务就不会锁定其他并发事务。
标签: c# sql-server ado.net