我有一个248 MB的日志文件,它可以扩展到GB。因此,您可以想象有多少行可以存在。我需要将所有行导入到SQL Server数据库中的表中。为此,我首先创建一个DataTable,并将日志文件中的所有行作为新行添加到该DataTable中。这发生得非常快。大约30秒内将有超过一百万条记录添加到表格中。在表格中填入行后,然后使用存储过程将DataTable中的记录导入到数据库中。然而这个阶段执行得非常严重。现在我想知道,如果我应该使用SqlBulkCopy WriteToServer方法,还是应该保持这种方式?如果SqlBulkCopy是一个更好的选择,那么我应该使用DataTable还是IDataReader版本。提前致谢。我应该使用SqlBulkCopy还是存储过程导入数据
0
A
回答
2
我会用SqlBulkCopy进行任何真实卷的数据导入。与SqlDataAdapter的性能差异可能很大。例如我blogged作为进口100K行性能对比:
SqlBulkCopy的:1.5885s
的SqlDataAdapter:25.0729s
如果您使用SqlBulkCopy的,这在我的测试用了进口一TableLock选项你可以得到更大的吞吐量然后下降到0.8229s。
还值得注意的是,使用SqlBulkCopy,可以让多个实例并行地将一段数据批量加载到相同的目标表中,而不会相互争用。道歉为另一external link,但我认为这是相关的。这是关于加载到堆表中,没有索引,以获得最佳性能,这可能不是您当前场景的选项,但绝对值得了解。
相关问题
- 1. 我应该使用sp_executesql还是EXEC运行存储过程?
- 2. 我应该使用mysql还是ssdb来存储like/vote数据?
- 3. 我应该使用NSUserDefaults还是plist来存储数据?
- 4. 在Delphi中,我应该从循环内使用多个数据库插入还是使用存储过程?
- 5. 我应该使用T-SQL函数,查看还是存储过程?
- 6. 静态数据应该存储在数据库还是应用程序中
- 7. 我应该使用表锁,而插入数据使用多线程SqlBulkCopy
- 8. 存储过程而不是SqlBulkCopy
- 9. 我应该在Mongo之前还是之后存储数据?
- 10. 我应该使用文件还是数据库表来存储参数?
- 11. 应该通过构造函数注入一个存储库还是使用?
- 12. MySQL导入数据。我可以导入存储过程吗?
- 13. C#应用程序 - 我应该使用存储过程还是使用C#编程技术的ADO.NET?
- 14. 我应该使用道具还是状态来存储TreeView数据?
- 15. 我应该使用哪个商店:文档存储还是SQLite?
- 16. 我应该使用Amazon S3还是SimpleDB存储小文档?
- 17. 用于存储过程的SqlBulkCopy
- 18. 我应该从客户端还是通过存储过程删除子对象
- 19. 存储过程应该很多还是集中?
- 20. 存储过程架构 - 我的MVC应用程序是否应该处理存储过程,还是应该类似于“工作人员角色”来处理它?
- 21. 我应该使用from_xml还是from_json来导入对象?
- 22. 我应该将数据存储在Umbraco还是定制的数据层中
- 23. 缓存图像和数据时应该使用内部还是外部存储?
- 24. 我应该使用数据集还是数据表?
- 25. 我应该在数据库中存储Type还是应该将其存储在枚举中?
- 26. 我应该在mysql数据库中存储双精度数还是小数?
- 27. 我应该总是使用服务,还是可以直接使用存储库?
- 28. 我应该进入Android Studio还是应该坚持使用Eclipse?
- 29. 使用存储过程将数据从MS Sql导入到MySQL
- 30. 我应该使用JSON还是AJAX作为响应数据?
正如你在SqlBulkCopy中练习了很多东西,你可能会知道为什么我会得到“Timeout过期,完成之前超时的时间......”的错误。我将连接超时增加到600秒。但是我在不到半分钟的时间里就会看到这个错误。 –
尝试在SqlBulkCopy上设置BulkCopyTimeout(以秒为单位):http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.bulkcopytimeout.aspx – AdaTheDev
非常感谢@AdaTheDev。你节省了我很多时间 –