[PaaS のみ]{class="badge informative" title="Adobe Commerce on Cloud プロジェクト(Adobeが管理する PaaS インフラストラクチャ)およびオンプレミスプロジェクトにのみ適用されます。"}

データベース設定のベストプラクティス

Adobe Commerceをクラウドインフラストラクチャにデプロイする際に、データベースのパフォーマンスを向上させ、データベースを効率的に操作するためのベストプラクティスについて説明します。

影響を受ける製品

Adobe Commerce on cloud infrastructure

すべての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に設定します。 参照については、開発者ドキュメントの宣言スキーマの設定/テーブルノード ​を参照してください。

宣言型スキームは、Adobe Commerce on cloud infrastructure バージョン 2.3で導入されました。

ネイティブ MySQL検索用に推奨される検索エンジンを設定する

Adobeでは、Adobe Commerce アプリケーションのサードパーティ検索ツールを設定する予定がある場合でも、Adobe Commerce on cloud infrastructure プロジェクトに対して常に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

クローンのデッドロックに関する潜在的な問題を回避するには、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 Merchant ドキュメントの​ アーカイブを有効にするを参照してください。

追加情報

recommendation-more-help
754cbbf3-3a3c-4af3-b6ce-9d34390f3a60