我需要将大量(16GB,6500万条记录)CSV文件上传到SQL Server 2005数据库中的单个表.有没有人对最佳方法有任何指示?
细节
我目前正在使用C#控制台应用程序(.NET framework 2.0)将导入文件拆分为50000条记录的文件,然后处理每个文件.我使用SqlBulkCopy类将数据从控制台应用程序上传到数据库中,批量为5000.分割文件大约需要30分钟,上传整个数据集(6500万条记录)大约需要4.5小时.生成的文件大小和批量上载大小都是配置设置,我正在研究增加两者的值以提高性能.要运行该应用程序,我们使用具有16GB RAM的四核服务器.该服务器也是数据库服务器.
更新
鉴于到目前为止的答案,请注意在导入之前:
导入完成后:
如果您可以建议任何不同的方法,或者我们可以改进现有导入应用程序的方法,我将不胜感激.谢谢.
相关问题
以下问题可能对处理此问题的其他人有用:
解
我已经调查了改变批量大小和拆分文件大小的影响,发现500个记录的批次和200,000个记录的拆分文件最适合我的应用程序.使用SqlBulkCopyOptions.TableLock也有帮助.有关详细信息,请参阅此问题的答案.
我还研究了使用SSIS DTS包和BULK INSERTSQL脚本.SSIS包看起来更快,但没有让我能够记录无效记录等BULK INSERT.SQL脚本虽然比SSIS包慢,但比C#应用程序要快得多.它确实允许我记录错误等,因此,我接受BULK INSERT来自ConcernedOfTunbridgeWells的答案作为解决方案.我知道这可能不是面对这个问题的每个人的最佳答案,但它解决了我的直接问题.
感谢所有回复的人.
此致,MagicAndi