1

我正在将中等规模(200k+ 用户)Drupal 6 CMS 升级到 Drupal 7。数据迁移将通过使用Migrate Module来处理。在 Drupal 版本 6 之前(包括在内),MyISAM 是 Drupal 数据库的默认 MySQL 存储引擎。从 Drupal 版本 7 开始,推荐使用 InnoDB。据此,我开发的迁移类必须将数据从旧的 D6 MyISAM DB 迁移到新的 D7 InnoDB DB。

我在运行迁移脚本时遇到了严重的性能问题:在“大型”Amazon Web Services 服务器实例上迁移 200k+ 用户配置文件将花费 20 多个小时,而该实例实际上已为此目的进行了优化。正如我从阅读模块的问题跟踪器中了解到的那样,使用所述迁移模块进行迁移时,此类性能问题并不少见。但是,我找到了一种解决方案,可以将 D7 DB 从 InnoDB 转换为 MyISAM,从而将性能提高十倍。

现在的问题是:由于一旦用户再次使用它,我将不得不使用 InnoDB 存储引擎运行 D7 DB,我想知道如果我将存储引擎设置为 MyISAM 是否会对 DB 造成任何损害迁移过程的持续时间以及之后返回 InnoDB?

谢谢你的帮助。

4

2 回答 2

4

如果您看到 InnoDB 和 MyISAM 之间的性能差异非常大,很可能是由于 InnoDB 正在做出的事务保证。将innodb_flush_log_at_trx_commit变量设置为0在迁移期间应该可以让您在迁移期间获得非常好的性能,然后您可以1在迁移完成后将其设置回。

即时更改是安全的;但是您应该注意,如果服务器在设置为 时崩溃0,您可能会丢失一些已提交的事务(但对于您的迁移,我猜这个警告很好)。

于 2013-01-30T10:11:42.783 回答
0

您还可以将 sync_binlog 变量更改为 0 ant,它还可以将速度提高到 20%,迁移后您可以将其设置回 1。

但如果在此过程之间发生电源故障,您可能会丢失一些数据。但是我认为您只是在迁移数据,则不会花费太多时间,并且断电的可能性非常低。

于 2013-08-14T19:19:31.150 回答