将大量数据往返于SQL Server(实际上是任何数据服务器)时要考虑的一些事情。
- 如果可以将文件拆分成多个部分并加载它们。可能是您没有充分利用SQL Server资源或使SQL Server资源总体承受压力,并且BCP副本的持续时间长使您容易遭受通信中断。因此,将文件拆分并异步异步加载(最安全),或者一次加载2、4或10个文件……看看是否可以让DBA从他们的椅子上走下来:)。
- 如果可以将文件放在SQL Server的本地驱动器上。避免网络/存储潜在的中断。 BCP不会容忍沟通中断。
- 消除目标表上的所有索引。 BCP变成一个哑巴,堆空,无聊的表。避免任何多余的操作,并尽可能使用char / varchar列(也要避免转换CPU成本)。
- 您可以调整BCP在写入SQL Server之前将要查询的批处理大小。默认值为1000,但您最多可以将其启动100,000或更多。做一些测试,看看哪种最适合您。使用较大的批处理可以节省一些时间,减少对物理磁盘的接触(这也取决于很多其他因素)。
- 如果必须跨网络拉文件,则还可以调整网络软件包的大小。搜索有关计算理想数据包大小的帮助。
- 还有其他选项,但正如其他人所述,如果没有更多细节,您将无法获得有针对性的答案。
共享您的bcp命令。文件共享结构。分享您正在访问的表的详细信息。分布式环境(SQL Server和bcp文件?),是否涉及网络?您每秒获得多少记录?文件宽还是窄?文件有多宽? 5个整数列的10亿条记录根本没有那么多数据。但是10亿条记录是2000字节宽……这真是个怪物!