與Adobe Commerce上max_allowed_packet相關的資料庫錯誤
本文針對var/log/exception.log
中的資料庫連線錯誤,提供解決方案,此錯誤可能在匯入大量產品或執行其他工作時發生,強制伺服器處理大於max_allowed_packet
中設定的大於預設值16MB的封包。
受影響的產品和版本
- 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錯誤頁面和New Relic APM資料庫頁面以及New Relic記錄檔來搜尋相關查詢。 -
為了快速修正,您可以在您提交票證時暫時要求增加
max_allowed_packet
大小,但這是由客戶工程團隊自行決定,因為值太大可能會導致網路阻塞,進而導致復寫失敗。 -
最佳實務是,您應該在CLI中針對某些大型資料庫表格執行下列命令:
code language-none show table status like [table name to match]
評估在這些資料表上執行的查詢,以判斷您是否超過建議的16MB
max_allowed_packet
大小。 請依照步驟一中的相同程式操作,以減少這類查詢傳回的資料。
相關閱讀
- 在開發人員檔案中內部部署安裝概觀。
- 資料庫上載遺失我們支援知識庫中與 MySQL的連線。
- 在我們的支援知識庫中雲端基礎結構上Adobe Commerce的資料庫最佳實務。
- 解決支援知識庫中資料庫效能問題的最佳實務。
- 在Commerce實作行動手冊中修改資料庫表格的最佳實務