MySQL のデッドロック
この文書では、MySQL のデッドロックについて説明し、サイトのダウン、データベースの読み込み停止、またはその他のAdobe Commerceの問題が発生した場合に、デッドロックを特定して解決できるようにします。
影響を受ける製品とバージョン
- Adobe Commerce オンプレミス 2.2.x および 2.3.x
- クラウドインフラストラクチャー 2.2.x および 2.3.x 上のAdobe Commerce
問題
MySQL のデッドロックは、2 つ以上のトランザクションが相互に保持してロックを要求する場合に発生します。 デッドロックが存在する場合、必ずしも問題を示しているわけではありませんが、多くの場合、発生した他の MySQL またはAdobe Commerceの問題の症状です。
多くの場合、アプリケーション、デプロイメントまたは MySQL ログで、「"deadlock" エラーまたは "ロックを取得しようとしたときにデッドロックが見つかりました。トランザクションを再開してみてください。" が表示されます。
原因:
デッドロックには複数の原因がありますが、最も一般的な原因は、DML/DDL クエリを同時に実行しながら、何らかのインタラクション(web サイト/プロセス/cron ジョブ/その他のユーザー/MySQL メンテナンス/MySQL インポート)を実行することです。
例えば、MySQL データベースインポートが停止するのを避けるためには、まずサイトをメンテナンスモードにして、デッドロックや停止したデータベースインポートの原因となる可能性のある SQL リクエストをデータベースに受け取らないようにすることがベストプラクティスです。
解決策
-
アプリケーション、デプロイメント、または MySQL ログでデッドロックエラーを確認します。
-
コマンド
mysql -e 'show full processlist';
を使用して、MySQL プロセスのリストでプロセスが実行されているかどうかを確認します。 -
クラウドインフラストラクチャー上のAdobe Commerceで、MySQL スレーブが有効になっていることを確認します。 詳しくは、「 変数をデプロイ(MYSQL_USE_SLAVE_CONNECTION)」を参照してください。
-
関連するエラーに応じて、ソリューション自体が表示されるか、 サポートチケットを開く必要がある場合は、役立つログ情報を含める必要がある場合があります。