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

发布于 2024-10-18 03:29:01 字数 138 浏览 2 评论 0原文

我想加快数据加载速度。

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

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

谢谢。

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.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

毁我热情 2024-10-25 03:29:02

如果您因为要替换实时表的内容而很着急,那么可以这样做:

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

RENAME 是“瞬时”且原子的,因此您“永远”不会宕机,无论发生什么情况桌子尺寸。

(因此您不必太担心 LOAD 的速度。)

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

挽容 2024-10-25 03:29:01

我可以推荐这些设置来缩短加载时间:

  • 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

除了设置之外,还有一些你可以做的事情自己做:

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

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.
他不在意 2024-10-25 03:29:01

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

更多 innodb 性能设置:

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

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/

魔法少女 2024-10-25 03:29:01

这可能不完全是您正在寻找的东西,但这是我过去使用过的技巧

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

希望它有所帮助。

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.

ゝ杯具 2024-10-25 03:29:01

如果可能的话,还要确保禁用二进制日志记录。

Also make sure that binary logging disabled if possible.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文