如何加速数据加载到InnoDB(LOAD DATA INFILE)?

时间:2011-02-16 19:12:48

标签: mysql import innodb load-data-infile

我想加快数据加载速度。

我使用MySQL 5.5,InnoDB并拥有1M行数据(65Mb文件)。这需要5分钟。

哪些mysql设置和命令会影响InnoDB的LOAD DATA INFILE的速度?

谢谢。

6 个答案:

答案 0 :(得分:19)

我可以推荐这些设置来改善加载时间:

  • innodb_doublewrite = 0
  • innodb_support_xa = 0
  • innodb_buffer_pool_size =(系统内存的50-80%)
  • innodb_log_file_size =(大数 - 256M等)
  • innodb_flush_log_at_trx_commit = 0

除了设置,您可以自己做一些事情:

  • 加载后创建索引(这是使用5.5 / InnoDB插件的新优化)。
  • 加载前对数据文件进行排序。
  • 拆分数据文件,并行加载。

答案 1 :(得分:4)

尝试删除索引和触发器。您可以在加载后重新创建它们。还要考虑使用my-huge.cnf中的一些高负载设置而不是默认设置。

更多innodb性能设置:

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

答案 2 :(得分:2)

这可能不是你想要的,但这是我过去使用过的技巧

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

希望它有所帮助。

答案 3 :(得分:0)

另外,如果可能,请确保禁用二进制日志记录。

答案 4 :(得分:0)

如果您因为要更换实时表格的内容而匆忙,那么就这样做:

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

RENAME是'瞬间'和原子,所以你永远不会'无论桌子大小,都可以。

(因此,您不必担心加速LOAD。)

答案 5 :(得分:0)

enter image description here

插入时间和文件大小之间似乎有很高的相关性。我建议对文件进行分区并并行插入分区表中。

r = 0.8936003754671448

enter image description here

表大小的增长与插入性能无关(气泡大小=文件大小)。

r = 0.004109728810459718