我正在使用 BCP 导入大量数据,我很好奇它有哪些选项可以提高此操作的速度。
我在几个地方读到了并行加载,还看到你可以告诉它不要费心对数据进行排序或检查约束(这对我来说都是可行的选择,因为源是另一个具有良好完整性的数据库)。
不过,我还没有看到使用这些选项的示例(例如,我不知道哪个命令行开关可以启用并行加载或禁用约束检查)。
有谁知道学习这个的好资源,或者有人可以给我几个简单的例子吗?请不要将我指向 BCP 参数帮助页面,关于这些特定选项,我无法做出正面或反面。
任何帮助是极大的赞赏!
我正在使用 BCP 导入大量数据,我很好奇它有哪些选项可以提高此操作的速度。
我在几个地方读到了并行加载,还看到你可以告诉它不要费心对数据进行排序或检查约束(这对我来说都是可行的选择,因为源是另一个具有良好完整性的数据库)。
不过,我还没有看到使用这些选项的示例(例如,我不知道哪个命令行开关可以启用并行加载或禁用约束检查)。
有谁知道学习这个的好资源,或者有人可以给我几个简单的例子吗?请不要将我指向 BCP 参数帮助页面,关于这些特定选项,我无法做出正面或反面。
任何帮助是极大的赞赏!
您需要阅读数据加载性能指南。没有神奇的命令行开关'加载更快',是在正确的上下文中做正确的事情的一个非常复杂的平衡。这取决于你加载的是堆还是B-Tree,是否已经有数据或表是否为空,是否有二级索引,数据库恢复模型中是否可以进行最小日志记录,表是否分区,数据是否预先排序,这只是表面。链接的白皮书包含所有详细信息。
看起来您正在谈论的并行加载只是针对同一个表运行 BCP 实用程序的多个实例。您将负责事先对数据进行分区。您可以通过指定TABLOCK
表提示来使用它。来自 MSDN:
批量更新 (BU) 锁允许进程将数据同时批量复制到同一个表中,同时阻止未批量复制数据的其他进程访问该表。
所以它真的只是一个 BCP 的特殊锁。
为了进一步提高性能,您可以进一步阅读BCP 参数页面-a
上的标志。
-a
允许指定更大的数据包大小(在 4096 和 65535 之间)以增加每个网络数据包一次发送到服务器的数据量。
-e
如果您打算运行多个 BCP 进程来帮助跟踪遇到的任何错误,我还建议使用错误标志。