我有一个包含50000条记录的CSV文件,我想使用JDBC中的批处理将其导入SQL。
对于此操作,应该选择什么样的最佳批处理大小?
根据Oracle官方建议,最佳批量大小在50到100之间。
证明: https://docs.oracle.com/cd/E11882_01/java.112/e16548/oraperf.htm#JJDBC28754
Oracle建议尽可能使用JDBC标准功能,这个建议同样适用于更新批处理。 Oracle更新批处理主要保留用于向后兼容性。
对于标准的更新批处理和Oracle更新批处理,Oracle建议您将批处理大小保持在50到100的一般范围内。这是因为尽管驱动程序支持更大的批次,但它们反过来会导致大量的内存占用,而没有相应的性能提升。非常大的批次通常会导致与较小的批次相比性能下降。
祝你有愉快的一天。
50000条记录并不算大型数据集。增加批处理大小可以提高效率,但如果假设数据库服务器网络往返时间为10毫秒:
批处理大小为50 => 50000行/50批处理大小*10毫秒延迟=10000毫秒延迟开销=10秒延迟开销
批处理大小为100 => 50000行/100批处理大小*10毫秒延迟=5000毫秒延迟开销=5秒延迟开销
首先设置一个合理的批处理大小用于批量插入语句,然后测量实际插入行所需的时间。记得在批量插入后进行vacuum操作。
如果50,000条记录需要1分钟插入,则需要专注于优化插入过程而非JDBC批处理大小,因为总时间只有一小部分用于延迟开销。
对于更大的数据集,您不应该使用JDBC。有专门设计用于批量插入任务的工具,例如Oracle的SQL*Loader。