MySQL插入超过500万行 - 提交每x行数选项?

时间:2010-01-08 21:36:00

标签: mysql

我使用MySQL Admin Migration工具包从数据库中转储数据。其中一个表有超过500万行。当我尝试加载生成的数据文件时,我遇到了内存问题。

有没有办法在X行之后强制提交?迁移工具包生成的脚本如下所示:

INSERT INTO mytable (`col1`, `col1`)
VALUES  (823, 187.25),
(823, 187.25),
(823, 187.25),
(823, 187.25),
(823, 187.25),
(823, 187.25),
(823, 187.25),
(823, 187.25),
(823, 187.25),
(823, 187.25),
(823, 187.25),
(823, 187.25),
(823, 187.25),
(823, 187.25),
(823, 187.25),

2 个答案:

答案 0 :(得分:3)

是。这个大的INSERT INTO语句本质上是一个脚本。带一个编辑吧;每隔几百行,插入一行显示COMMIT,然后启动一个新的INSERT ... VALUES语句。

要获得额外的功劳,您可以编写一个简单的脚本,以编程方式将原始SQL语句重写为多个事务(如上所述)。你不想反复用手做这件事。

您无法激活外部设置,因此您可以完整地提交此脚本并定期进行自动提交,而无需更改脚本。

增加日志文件空间可能会提高限制,但我不会指望它。面对现实:数据库根本不是为处理数千行的语句而构建的。

我可能做的是做多次提交,但是将这些内容推送到临时表或带有“临时”标志;然后运行一个或少量操作以使这些更改永久化。如果出现问题,您仍然可以重试或删除临时记录。

答案 1 :(得分:3)

要求您的DBA将innodb_log_file_size从默认的5M增加到256MB。它还为写密集型工作负载提供了良好的性能提升。请注意,在更改此设置时,您需要在重新启动守护程序之前删除旧的日志文件。它应该不再需要“自动提交每X行”。