Mysql

加速 longtext 或 longblob 列的插入

  • April 10, 2015

我目前正在使用 SQL WORKBENCH工具將 DB2 數據庫遷移到 MySQL

它基本上是從 DB2 中選擇並插入到 DB2。

它工作正常,但在具有 longblob 或 longtext 列(用於儲存 xml 或圖像)的表上,它需要大量時間。(對於 10M 行的表大約需要 40 小時)。

事實:

  • 伺服器:2CPU 核心和 8GB 記憶體作業系統:Linux RHEL 6.5
  • MySQL 伺服器 5.6.13
  • 表是 InnoDB。
  • MySQL 伺服器和遷移工具在同一台電腦上,因此沒有網路成本。
  • MySQL 上的表有 PRIMARY KEYS 但沒有任何其他索引。
  • 我為大量插入禁用了二進制日誌。
  • 我將遷移工具配置為批量插入 10

行並送出每個插入(10 行)。

這裡有兩個問題:

  1. 考慮到列的大小(longtext、longblob),建議批量插入大小的值是多少?
  2. 是否建議對 my.cnf 進行任何調整以提高插入性能?

這是 my.cnf 文件的內容:

[mysqld]

open_files_limit=2048
table_open_cache=1024
query_cache_type=1
query_cache_size=64M
tmp_table_size=32M
thread_cache_size=9
default-storage-engine=INNODB
back_log=80
flush_time=0
join_buffer_size=1M
max_allowed_packet=1G
max_connect_errors=100
sort_buffer_size=256K
table_definition_cache=1400
binlog_row_event_max_size=8K
log-bin
log_bin_trust_function_creators=1

#INNODB
innodb_additional_mem_pool_size=8M
innodb_flush_log_at_trx_commit=1
innodb_data_file_path = ibdata1:5G:autoextend
innodb_log_buffer_size=16M
innodb_buffer_pool_size=6144M
innodb_log_file_size=1GB
innodb_thread_concurrency=3
innodb_autoextend_increment=64
innodb_concurrency_tickets=5000
innodb_old_blocks_time=1000
innodb_open_files=300
innodb_stats_on_metadata=0
innodb_file_per_table=1
innodb_checksum_algorithm=0

InnoDB 架構(來自 Percona 首席技術官 Vadim Tkachenko)

InnoDB 架構

  1. 考慮到列的大小(longtext、longblob),建議批量插入大小的值是多少?
  1. 是否有任何調整建議my.cnf以提高插入性能?

提議的變更

[mysqld]
innodb_log_buffer_size    = 256M
innodb_log_file_size      = 2G
innodb_write_io_threads   = 16
innodb_thread_concurrency = 0

試一試 !!!

引用自:https://dba.stackexchange.com/questions/97432