我正在将中等规模(200k +用户)Drupal 6 CMS升级到Drupal 7.我们将使用Migrate Module处理数据迁移。直到并包括Drupal版本6,MyISAM是Drupal数据库的默认MySQL存储引擎。从Drupal版本7开始,推荐使用InnoDB。据此,我开发的迁移类必须将数据从旧的D6 MyISAM DB迁移到新的D7 InnoDB DB。
我在运行迁移脚本时遇到了严重的性能问题:200k +用户配置文件的迁移需要花费20多个小时才能完成#34;大型" Amazon Web Services服务器实例,实际上已针对此目的进行了优化。正如我从阅读模块的问题跟踪器中学到的那样,这种性能问题对于使用所述迁移模块的迁移并不罕见。但是,通过将D7数据库从InnoDB转换为MyISAM,我找到了将性能提高十倍的解决方案。
现在问题在于:由于我将不得不再次使用InnoDB存储引擎运行D7数据库,我想知道它是否会对数据库造成任何损害如果我在迁移过程中将存储引擎设置为MyISAM,然后又返回InnoDB?
感谢您的帮助。
答案 0 :(得分:4)
如果你看到InnoDB和MyISAM之间存在非常大的性能差异,那很可能是因为InnoDB正在进行交易保证。在迁移期间将innodb_flush_log_at_trx_commit
变量设置为0
可以让您在迁移时获得非常好的性能,然后可以在迁移完成后将其设置回1
。 / p>
即时更换是安全的;但是你应该注意,如果服务器在设置为0
时崩溃,你可能会丢失一些已提交的事务(但是对于你的迁移,我猜这个警告很好)。
答案 1 :(得分:0)
你也可以将sync_binlog变量更改为0,它也可以将速度提高到20%,迁移后你可以将它设置为1。
但如果在此过程之间出现电源故障,则可能会丢失一些数据。 但我认为你只是在迁移数据,那么它不会花费太多时间,而且电源故障的可能性非常低。