批量插入时如何选择正确的批量大小

how to choose the right batch size while bulk inserting

如何选择正确的批量大小,我也有一个疑问。假设我的数据集中有 50000 行,我正尝试使用 batch.The 将其插入到 sql 中批处理是为了节省时间吧。那么,为什么我必须将批处理大小设置为小集,为什么我不能只创建一个 50000 的批处理大小并且只执行一次呢?

我会说 maximum query length 是限制因素。此外,如有疑问,只需 运行 一些测试,看看在您的特定设置中什么能提供最佳结果。

正如@Erik 所说,max_allowed_packet 默认为 4MB。您的其中一行的平均长度是否超过 83 个字节?乘以 50,000 将超过默认语句长度。

您的列的长度是否可变,例如 VARCHAR、TEXT 或 BLOB?如果是这样,则 50,000 行可能比您预期的要长,具体取决于您需要加载的数据。也许今天你将 50,000 行放入一个批次中,但下周它将失败,因为数据导致 SQL 语句太长,即使行数相同。

本周也是 50,000 行。如果下周数据负载为 100,000 行怎么办?你会提前知道吗?编写代码将输入数据拆分为更适中大小的较小批次不是更安全吗?

另一个原因是非常庞大的事务可能会给 InnoDB 日志缓冲区或二进制日志缓冲区带来麻烦。

如果语句本身需要几秒钟,也可能导致临时复制滞后。