【发布时间】:2011-02-28 01:06:47
【问题描述】:
我有一个 mysql 数据库和一个大小为 74 GB 的表。我目前正在使用 mysql 命令将此数据加载到 mysql 数据库中。花了10多个小时,还在运行。有没有办法将数据并行加载到 mysql 数据库中。一种方法是将表数据实际拆分为多个文件,然后对每个文件调用 load。但是,这更像是一种黑客行为。 stackoverflowers 有什么追随的吗?
谢谢。
【问题讨论】:
我有一个 mysql 数据库和一个大小为 74 GB 的表。我目前正在使用 mysql 命令将此数据加载到 mysql 数据库中。花了10多个小时,还在运行。有没有办法将数据并行加载到 mysql 数据库中。一种方法是将表数据实际拆分为多个文件,然后对每个文件调用 load。但是,这更像是一种黑客行为。 stackoverflowers 有什么追随的吗?
谢谢。
【问题讨论】:
确保您的源文件和数据库存储在快速磁盘上并且没有碎片。我已经看到值得更改表的数据库引擎以加快导入速度,然后在导入后将其更改回来。我会尝试使用 INNODB 和 MyISAM 引擎,看看是否更快。
完成后删除所有索引并重新添加它们。无论如何,您都必须重新优化它们,并且只执行一次要快得多。当您将它们添加回来时,将它们组合成一个 alter 语句(更快)。
将您的数据导出为方便的批量加载格式。您可以很容易地将 10,000 行或更多行的数据库放入文件的一行中。
PHPMyAdmin 和 MySQL Docs 具有您应该使用的设置来尽可能地延迟以加快读取速度。确保没有其他东西在使用这个数据库和/或表。这只会减慢速度。
确保您提供的编码与数据库上的编码相匹配。
将文件传输到数据库服务器并从那里导入(不要通过网络从另一台机器导入)。
如果可以并且您正在使用它,请关闭复制。如果可以并且您正在使用它,请关闭日志记录。二进制日志将使您必须写入的数据量翻倍。
【讨论】:
并行插入一个表(出于速度目的)是无稽之谈。
而且拆分表也不太明智。
您必须确保表中没有索引。
在单独的磁盘/控制器上有一个源文件会很好。
【讨论】: