gpt4 book ai didi

java - 在 Jdbc 和 Mysql 中使用 Prepared Statements 批量插入非常慢

转载 作者:行者123 更新时间:2023-11-29 03:41:36 28 4
gpt4 key购买 nike

在带有 Mysql 的 Jdbc 中使用 Prepared Statements 批量插入非常慢我正在尝试插入 300 Milion 记录。记录被拆分成 29 个表我尝试每批处理 2000 条和 1000 条记录,插入时间分别为 20 分钟和 10 分钟只有一个表有 20 列剩余所有表将有 3 到 6 列

Java 代码在 5 秒内读取 10000 行,但批量插入需要 90 分钟

我正在使用 4gb 内存的 Windows 7

我的Mysql my.ini配置是

[client]

port=3306

[mysql]

default-character-set=latin1

[mysqld]

max_allowed_packet=100M
wait_timeout=3000

port=3306

basedir="C:/Program Files (x86)/MySQL/MySQL Server 5.1/"

datadir="C:/ProgramData/MySQL/MySQL Server 5.1/Data/"

default-character-set=latin1

default-storage-engine=INNODB

sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

max_connections=100

query_cache_size=0

table_cache=256

tmp_table_size=33M

thread_cache_size=8

myisam_max_sort_file_size=100G

myisam_sort_buffer_size=66M

key_buffer_size=53M

read_buffer_size=64K
read_rnd_buffer_size=256K

sort_buffer_size=256K

innodb_additional_mem_pool_size=3M

innodb_flush_log_at_trx_commit=1

innodb_log_buffer_size=2M

innodb_buffer_pool_size=206M

innodb_log_file_size=52M

innodb_thread_concurrency=10

最佳答案

我的建议是DROP 所有表的索引,INSERT 行,然后重新创建索引。如果不需要为插入的每一行更新索引,数据库可以更快地插入数据。与使用“随机”插入序列构建索引相比,从头开始创建索引的速度更快。

如果您可以将各个表的行按主键顺序排序,并按该顺序插入它们,也可能会有所改善。

最后,批处理是大量小请求的成本与进行大/长事务的成本之间的权衡。尝试使用比您当前使用的更小和更大的批处理大小进行试验。

关于java - 在 Jdbc 和 Mysql 中使用 Prepared Statements 批量插入非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13177894/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com