How to speed up a data loading into InnoDB (LOAD DATA INFILE)?

前端 未结 5 2072
粉色の甜心
粉色の甜心 2020-12-24 09:37

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

相关标签:
5条回答
  • 2020-12-24 10:18

    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.

    0 讨论(0)
  • 2020-12-24 10:22

    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.
    0 讨论(0)
  • 2020-12-24 10:27

    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.)

    0 讨论(0)
  • 2020-12-24 10:36

    Also make sure that binary logging disabled if possible.

    0 讨论(0)
  • 2020-12-24 10:44

    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/

    0 讨论(0)
提交回复
热议问题