2012-01-23 62 views
0

我有一个248 MB的日志文件,它可以扩展到GB。因此,您可以想象有多少行可以存在。我需要将所有行导入到SQL Server数据库中的表中。为此,我首先创建一个DataTable,并将日志文件中的所有行作为新行添加到该DataTable中。这发生得非常快。大约30秒内将有超过一百万条记录添加到表格中。在表格中填入行后,然后使用存储过程将DataTable中的记录导入到数据库中。然而这个阶段执行得非常严重。现在我想知道,如果我应该使用SqlBulkCopy WriteToServer方法,还是应该保持这种方式?如果SqlBulkCopy是一个更好的选择,那么我应该使用DataTable还是IDataReader版本。提前致谢。我应该使用SqlBulkCopy还是存储过程导入数据

回答

2

我会用SqlBulkCopy进行任何真实卷的数据导入。与SqlDataAdapter的性能差异可能很大。例如我blogged作为进口100K行性能对比:

SqlBulkCopy的:1.5885s
的SqlDataAdapter:25.0729s

如果您使用SqlBulkCopy的,这在我的测试用了进口一TableLock选项你可以得到更大的吞吐量然后下降到0.8229s。

还值得注意的是,使用SqlBulkCopy,可以让多个实例并行地将一段数据批量加载到相同的目标表中,而不会相互争用。道歉为另一external link,但我认为这是相关的。这是关于加载到堆表中,没有索引,以获得最佳性能,这可能不是您当前场景的选项,但绝对值得了解。

+0

正如你在SqlBulkCopy中练习了很多东西,你可能会知道为什么我会得到“Timeout过期,完成之前超时的时间......”的错误。我将连接超时增加到600秒。但是我在不到半分钟的时间里就会看到这个错误。 –

+0

尝试在SqlBulkCopy上设置BulkCopyTimeout(以秒为单位):http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.bulkcopytimeout.aspx – AdaTheDev

+0

非常感谢@AdaTheDev。你节省了我很多时间 –

相关问题