1

中規模(20万人以上のユーザー)のDrupal6CMSをDrupal7にアップグレード中ですデータの移行はMigrateModuleを使用して処理されます。Drupalバージョン6までは、MyISAMがDrupalデータベースのデフォルトのMySQLストレージエンジンでした。Drupalバージョン7以降、InnoDBが推奨されます。これによると、私が開発した移行クラスは、古いD6MyISAMDBから新しいD7InnoDBDBにデータを移行する必要があります。

移行スクリプトを実行すると、深刻なパフォーマンスの問題が発生します。この目的のために実際に最適化された「大規模な」アマゾンウェブサービスサーバーインスタンスでは、200k以上のユーザープロファイルの移行に20時間以上かかります。モジュールの課題追跡システムを読んで学んだように、このようなパフォーマンスの問題は、前述の移行モジュールを使用する移行では珍しいことではありません。ただし、D7 DBをInnoDBからMyISAMに変換することで、パフォーマンスを10倍に向上させるソリューションを見つけました。

ここで質問があります。ユーザーが再び使用するようになると、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 に答える