Adobe Commerceの max_allowed_packet に関連するデータベースエラー
この記事では、多数の製品をインポートしたり、デフォルトの 16MB よりも大きい max_allowed_packet
で設定されているサイズよりも大きいパケットをサーバーで強制的に処理する別のタスクを実行したりしたときに発生する可能性がある var/log/exception.log
ータのデータベース接続エラーに対する解決策を示します。
影響を受ける製品とバージョン
- Adobe Commerce オンプレミス、すべて サポート対象バージョン
問題
MySQL クライアントまたは mysqld サーバーが max_allowed_packet バイトを超えるパケットを受信すると、ER_NET_PACKET_TOO_LARGE エラー(exception.log
に表示されます)を発行して接続を閉じます。 一部のクライアントでは、通信パケットが大きすぎると、クエリ中にサーバーへの接続が失わ MySQL る というエラーが発生する場合もあります。
再現手順
この問題は、様々なタスクが原因で発生する可能性があります。 これには、大量の商品をAdobe Commerceに読み込もうとすることや、大量のデータを送り返すトランザクションクエリなどが含まれます。 その結果、var/log/exception.log
でデータベース接続エラーが発生し、製品が正常に読み込まれないなどの問題が発生します。
原因:
MySQL max_allowed_packets
設定のデフォルト値 16MB は、ニーズに合った十分な大きさではありません。
解決策
-
個々の行が現在の
max_allowed_packet
制限を超えているクエリを特定します。 返されるデータの量を減らすには、このようなクエリを書き換える必要があります。 これは、SELECT
ステートメントの列数を減らすか、テーブルデザインの一環として様々な列に対して小さいデータ型を選択することで行うことができます。 New Relic アカウントをお持ちの場合、New Relic APM Errors ページNew Relic APM Databases ページおよび New Relic Logs を使用して、関連するクエリを検索します。 -
迅速な修復を行うために、 チケットを送信する際に、
max_allowed_packet
のサイズを増やすように一時的にリクエストできますが、値が大きすぎると、ネットワークの輻輳が発生してレプリケーションにエラーが発生する可能性があるので、これはカスタマー・エンジニアリング・チームの判断で行います。 -
ベストプラクティスとして、一部の大規模なデータベーステーブルに対して、CLI で次のコマンドを実行する必要があります。
code language-none show table status like [table name to match]
これらのテーブルで実行されているクエリを評価して、推奨される
max_allowed_packet
サイズを 16 MB 超えていないかどうかを判断します。 手順 1 と同じプロセスに従って、このようなクエリによって返されるデータを減らします。
関連資料
- 開発者向けドキュメントの オンプレミスでのインストールの概要を参照してください。
- サポートナレッジベースの データベースのアップロードにより MySQL への接続が失われます。
- クラウドインフラストラクチャー上のAdobe Commerceに関するデータベースのベストプラクティスについては、サポートナレッジベースを参照してください。
- サポートナレッジベースの データベースパフォーマンスの問題を解決するためのベストプラクティス。
- Commerce実装プレイブックの データベーステーブルを変更する際のベストプラクティス