データベース設定のベストプラクティス
クラウドインフラストラクチャーにAdobe Commerceをデプロイする際に、データベースのパフォーマンスを向上させ、データベースを効率的に操作するためのベストプラクティスについて説明します。
対象製品
クラウドインフラストラクチャー上のAdobe Commerce
すべての MyISAM テーブルを InnoDB に変換する
Adobeでは、InnoDB データベースエンジンを使用することをお勧めします。 デフォルトのAdobe Commerce インストールでは、データベース内のすべてのテーブルが InnoDB エンジンを使用して格納されます。 ただし、一部のサードパーティモジュール(拡張機能)では、MyISAM 形式のテーブルを導入できます。 サードパーティ製モジュールをインストールしたら、データベースをチェックして myisam
形式のテーブルを識別し、innodb
形式に変換します。
モジュールに MyISAM テーブルが含まれているかどうかの確認
インストールする前にサードパーティのモジュールコードを分析して、MyISAM テーブルを使用しているかどうかを判断できます。
すでに拡張機能をインストールしている場合は、次のクエリを実行して、データベースに MyISAM テーブルがあるかどうかを確認します。
SELECT table_schema, CONCAT(ROUND((index_length+data_length)/1024/1024),'MB')
AS total_size FROM information_schema. TABLES WHERE engine='myisam' AND table_schema
NOT IN ('mysql', 'information_schema', 'performance_schema', 'sys');
ストレージエンジンを InnoDB に変更する
テーブルを宣言する db_schema.xml
ファイルで、対応する table
ノードの engine
属性値を innodb
に設定します。 開発者向けドキュメントの 宣言型スキーマの設定/テーブルノードを参照してください。
宣言型スキームは、クラウドインフラストラクチャバージョン 2.3 上のAdobe Commerceで導入されました。
ネイティブの MySQL 検索用に推奨される検索エンジンを設定
Adobeでは、Adobe Commerce アプリケーションにサードパーティの検索ツールを設定する予定がある場合でも、クラウドインフラストラクチャプロジェクトでAdobe Commerceに対して常にElasticsearchまたは OpenSearch を設定することをお勧めします。 この設定により、サードパーティの検索ツールでエラーが発生した場合に備えたフォールバックオプションが提供されます。
使用する検索エンジンは、インストールされているAdobe Commerce on cloud バージョンによって異なります。
-
Adobe Commerce 2.4.4 以降では、ネイティブの MySQL 検索に OpenSearch サービスを使用します。
-
以前のバージョンのAdobe Commerceの場合は、Elasticsearchを使用します。
現在使用されている検索エンジンを確認するには、次のコマンドを実行します。
./bin/magento config:show catalog/search/engine
設定手順については、Adobe Commerce on cloud の開発者ガイドを参照してください。
カスタムトリガーの回避
可能であれば、カスタムトリガーの使用は避けます。
トリガーは、変更を監査テーブルに記録するために使用されます。 Adobeは、次の理由から、トリガー機能を使用する代わりに、監査表に直接書き込むようにアプリケーションを設定することをお勧めします。
- トリガーはコードとして解釈され、MySQL は事前にコンパイルしません。 クエリのトランザクション領域にフックすると、テーブルで実行される各クエリのパーサーとインタープリターにオーバーヘッドが追加されます。
- トリガーは元の問い合わせと同じトランザクション領域を共有し、それらの問い合わせがテーブルのロックに競合する間、トリガーは別のテーブルのロックに独立して競合する。
カスタムトリガー以外の代替方法について詳しくは、MySQL トリガー を参照してください。
ECE-Tools をバージョン 2002.0.21 以降にアップグレードしてください ece-tools-version
Cron デッドロックの潜在的な問題を回避するには、ECE-Tools をバージョン 2002.0.21 以降にアップグレードしてください。 手順については、開発者向けドキュメントの バージョン ece-tools
更新を参照してください。
インデクサーモードの安全な切り替え
インデクサーを切り替えると、data definition language (DDL) ステートメントが生成され、データベース ロックの原因となる可能性のあるトリガーが作成されます。 この問題を回避するには、web サイトをメンテナンスモードにし、設定を変更する前に cron ジョブを無効にします。
手順については、Adobe Commerce設定ガイド 🔗 の インデクサーの設定 を参照してください。
実稼動環境で DDL ステートメントを実行しない
競合(テーブルの変更や作成など)を防ぐために、実稼動環境では DDL ステートメントを実行しないでください。 setup:upgrade
プロセスは例外です。
DDL ステートメントを実行する必要がある場合は、web サイトをメンテナンスモードにして、cron を無効にします(前の節のインデックスを安全に切り替える手順を参照)。
注文のアーカイブを有効にする
管理者からの注文アーカイブを有効にして、注文データの増加に合わせてセールステーブルに必要なスペースを減らします。 アーカイブにより、MySQL のディスク領域が節約され、チェックアウトのパフォーマンスが向上します。
Adobe Commerce マーチャントドキュメントの アーカイブの有効化を参照してください。