提高BCP的速度 - 命令行选项?

时间:2012-05-07 21:52:05

标签: sql-server bcp

我正在使用BCP导入大量数据,我很好奇它有哪些选项来提高此操作的速度。

我读到了几个地方的并行加载,并且看到你可以告诉它不要费心排序数据或检查约束(这对我来说都是可行的选项,因为源是另一个具有良好完整性的数据库)

我还没有看到使用这些选项的示例(例如,我不知道什么命令行开关启用并行加载或禁用检查禁用)。

有没有人知道学习这个的好资源,或者有人能给我一些简单的例子吗?请不要指向BCP参数帮助页面,关于这些特定选项,我无法做出正面或反面。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:5)

您需要阅读The Data Loading Performance Guide。没有神奇的命令行开关,加载速度更快,在正确的环境中做正确的事情是一个非常复杂的平衡。这取决于您是加载堆还是B-Tree,是否已存在数据或表是否为空,是否具有二级索引,是否可以在数据库恢复模型中进行最小日志记录,表是否已分区,数据是否已预先排序,而且只是表面。链接的白皮书包含所有细节。

答案 1 :(得分:3)

看起来你正在谈论的并行加载只是针对同一个表运行BCP实用程序的多个实例。您将负责事先对数据进行分区。您可以通过指定TABLOCK表提示来使用它。来自MSDN:

  

批量更新(BU)锁允许进程将数据并发批量复制到同一个表中,同时防止其他非批量复制数据的进程访问该表。

所以它真的只是BCP的一个特殊锁。

为了进一步提高效果,您可以进一步阅读BCP parameters页面上的-a标记。

-a允许指定更大的数据包大小(在4096和65535之间),以增加每个网络数据包一次发送到服务器的数据量。

如果您打算运行多个BCP流程以帮助跟踪遇到的任何错误,我还建议您使用-e标志并显示错误。