簡體   English   中英

在帶有MySQL的Jdbc中使用預准備語句進行批處理插入非常慢

[英]Batch Insertions Using Prepared Statements in Jdbc with Mysql are very slow

使用Jdbc和Mysql在Jdbc中使用預處理語句進行批處理插入非常緩慢,我正在嘗試插入300萬條記錄。 記錄被分為29個表,我嘗試了每批2000和1000條記錄,插入時間分別為20分鍾和10分鍾,只有一個表有20列,其余所有表的列從3到6

Java代碼在5秒內讀取10000行,但是批量插入需要90分鍾的時間

我正在使用Windows 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行,然后重新創建索引。 如果數據庫不需要為插入的每一行更新索引,則可以更快地插入數據。 與使用“隨機”插入序列構建索引相比,從頭開始創建索引的速度更快。

如果您可以將各個表的行按主鍵順序排序,然后按該順序插入它們,則可能也會有所改善。

最后,批處理是許多小請求的成本與進行大/長交易的成本之間的權衡。 嘗試試驗小於和大於當前使用的批量大小。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM