如何在 JDBC 中 select 优化批量大小?

How to select optimal batch size in JDBC?

我有一个包含 50000 个条目的 CSV 文件,我想在 SQL 中使用批处理导入 JDBC。

它的最佳批量大小应该是多少?

根据 Oracle 官方的建议,最佳批量大小在 50 到 100 之间

证明: https://docs.oracle.com/cd/E11882_01/java.112/e16548/oraperf.htm#JJDBC28754

Oracle 建议您尽可能使用 JDBC 标准功能。此建议也适用于更新批处理。保留 Oracle 更新批处理主要是为了向后兼容。

对于标准更新批处理和 Oracle 更新批处理,Oracle 建议您将批处理大小保持在 50 到 100 的一般范围内。这是因为尽管驱动程序支持更大的批处理,但它们反过来会导致占用大量内存足迹而性能没有相应的提高。与较小的批次相比,非常大的批次通常会导致性能下降。

祝你有愉快的一天

50k 条记录不是一个大数据集。更大的批量大小会有所帮助,但如果您假设数据库服务器网络往返为 10 毫秒:

  1. 批量大小 50 => 50,000 行/50 批量大小 * 10 毫秒延迟 = 10000 毫秒延迟开销 = 10 秒延迟开销

  2. 批量大小 100 => 50,000 行/100 批量大小 * 10 毫秒延迟 = 5000 毫秒延迟开销 = 5 秒延迟开销

首先为批量插入语句设置一个合理的批量大小,然后测量插入行实际需要多长时间记得在批量插入后进行清理。

如果插入 50k 条记录需要 1 分钟,您需要专注于优化插入过程而不是 JDBC 批处理大小,因为延迟开销只花费了总时间的一小部分。

对于较大的数据集,您不应使用 JDBC。有专为批量插入任务设计的工具,例如Oracle 有 SQL*Loader.