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

标签 java mysql sql jdbc

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

最佳答案

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

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

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

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

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

关于java - 批量插入时如何选择正确的批量大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66422643/

相关文章:

java - 使用带 GUI 的 map

php - 模态只显示一个人 - php mysql

python - Sqlalchemy 如何切片字符串并将其转换为 int 然后检查它是否大于数字?

java - Eclipse 仅编译引用的类(如何设置 Intellij 来执行相同的操作)

java - 在 Clojure 中覆盖 java 父类(super class)方法

sql - 如何对 MySQL 数据库中的 ENUM 列进行排序?

sql - 更新行组以从行 SQL 的总和中删除特定的总金额

sql - 查询超时

Java RMI 远程对象转换/状态

PHP如何引用字符串数组值