How to speed up a data loading into InnoDB (LOAD D

2019-01-22 00:54发布

I want to speed up a data loading.

I use MySQL 5.5, InnoDB and have 1M rows of data (65Mb file). It takes 5 minutes.

What mysql settings and commands affect the speed of LOAD DATA INFILE for InnoDB?

Thank you.

5条回答
贼婆χ
2楼-- · 2019-01-22 00:58

I can recommend these settings to improve load time:

  • innodb_doublewrite = 0
  • innodb_support_xa = 0
  • innodb_buffer_pool_size = (50-80% of system memory)
  • innodb_log_file_size = (a large number - 256M etc)
  • innodb_flush_log_at_trx_commit = 0

Other than settings, there are some things you can do yourself:

  • Create indexes after loading (this is a new optimization with 5.5 / InnoDB plugin).
  • Sort the data file before loading.
  • Split the data file, and load in parallel.
查看更多
劳资没心,怎么记你
3楼-- · 2019-01-22 00:58

Try removing indexes and triggers. You can re-create them after the load. Also look into using some of the high-load settings in my-huge.cnf instead of the defaults.

Some more innodb performance settings:

http://www.mysqlperformanceblog.com/2007/11/01/innodb-performance-optimization-basics/

查看更多
Melony?
4楼-- · 2019-01-22 01:07

Also make sure that binary logging disabled if possible.

查看更多
时光不老,我们不散
5楼-- · 2019-01-22 01:12

This might not be exactly what you're looking for but is a trick I've used in the past

ALTER TABLE TABLE_NAME DISABLE KEYS;
LOAD DATA INFILE ... ;
ALTER TABLE TABLE_NAME ENABLE KEYS;

Hope it helps.

查看更多
虎瘦雄心在
6楼-- · 2019-01-22 01:23

If you are in a hurry because you are replacing the contents of a live table, then do it this way instead:

CREATE TABLE new LIKE live;
LOAD DATA ... INTO new;
RENAME TABLE live TO old, new TO live;
DROP TABLE old;

The RENAME is 'instantaneous' and atomic, so you are 'never' down, regardless of table size.

(Hence you don't need to worry so much about speeding up the LOAD.)

查看更多
登录 后发表回答