Adobe Commerceの max_allowed_packet に関連するデータベースエラー

この記事では、多数の製品をインポートしたり、デフォルトの 16MB よりも大きい max_allowed_packet で設定されているサイズよりも大きいパケットをサーバーで強制的に処理する別のタスクを実行したりしたときに発生する可能性がある var/log/exception.log ータのデータベース接続エラーに対する解決策を示します。

影響を受ける製品とバージョン

問題

MySQL クライアントまたは mysqld サーバーが max_allowed_packet バイトを超えるパケットを受信すると、ER_NET_PACKET_TOO_LARGE エラー(exception.log に表示されます)を発行して接続を閉じます。 一部のクライアントでは、通信パケットが大きすぎると、クエリ中にサーバーへの接続が失わ MySQL る というエラーが発生する場合もあります。

再現手順

この問題は、様々なタスクが原因で発生する可能性があります。 これには、大量の商品をAdobe Commerceに読み込もうとすることや、大量のデータを送り返すトランザクションクエリなどが含まれます。 その結果、var/log/exception.log でデータベース接続エラーが発生し、製品が正常に読み込まれないなどの問題が発生します。

原因:

MySQL max_allowed_packets 設定のデフォルト値 16MB は、ニーズに合った十分な大きさではありません。

解決策

  1. 個々の行が現在の max_allowed_packet 制限を超えているクエリを特定します。 返されるデータの量を減らすには、このようなクエリを書き換える必要があります。 これは、SELECT ステートメントの列数を減らすか、テーブルデザインの一環として様々な列に対して小さいデータ型を選択することで行うことができます。 New Relic アカウントをお持ちの場合、New Relic APM Errors ページNew Relic APM Databases ページおよび New Relic Logs を使用して、関連するクエリを検索します。

  2. 迅速な修復を行うために、 チケットを送信する際に、max_allowed_packet のサイズを増やすように一時的にリクエストできますが、値が大きすぎると、ネットワークの輻輳が発生してレプリケーションにエラーが発生する可能性があるので、これはカスタマー・エンジニアリング・チームの判断で行います。

  3. ベストプラクティスとして、一部の大規模なデータベーステーブルに対して、CLI で次のコマンドを実行する必要があります。

    code language-none
    show table status like [table name to match]
    

    これらのテーブルで実行されているクエリを評価して、推奨される max_allowed_packet サイズを 16 MB 超えていないかどうかを判断します。 手順 1 と同じプロセスに従って、このようなクエリによって返されるデータを減らします。

関連資料

recommendation-more-help
8bd06ef0-b3d5-4137-b74e-d7b00485808a