交易征收绩效问题

时间:2011-07-26 07:48:50

标签: c# .net asp.net sql-server windows

我们有一个冗长的数据库操作。当我们使用enlist = true执行此操作时,需要29分钟才能完成。当我们使用enlist = false执行此操作时,只需15分钟即可完成。如此巨大的性能影响是什么原因?它与数据库服务器有关吗?

我们如何避免它?请分享您的想法。

数据库:SQL Server 2005

Frameowrk:.Net 3.0

1 个答案:

答案 0 :(得分:4)

  

我们如何避免它?

  

csv文件中的总行数为100000。

在这种情况下,使用SqlBulkCopy将100,000行写入临时表(基本和单独的表,不是事务表的一部分;没有触发器,外键等)。数据进入临时表后,使用TSQL(直接或SPROC)从临时表中执行INSERT事务性表,即数据所在的位置。交易只需跨越最后一次操作。

这实现了几个关键的事情:

  • SqlBulkCopy使用与批量插入相同的API;它是通过网络将大量数据转移到SQL Server的最快方法
  • 它最大限度地减少了交易的规模,最显着的是不包括交易中的所有数据传输时间;只有核心INSERT是事务性的,但此时所有数据都是本地的