與Adobe Commerce上max_allowed_packet相關的資料庫錯誤

本文提供資料庫連線錯誤的解決方案,位於 var/log/exception.log 當匯入大量產品或執行其他工作以強制伺服器處理大於中設定的封包時,可能會發生這種情況 max_allowed_packet 大於預設值16MB。

受影響的產品和版本

問題

當MySQL使用者端或 mysqld 伺服器接收大於 max_allowed_packet 位元組,它會發出 ER_NET_PACKET_TOO_LARGE 錯誤(可在 exception.log)並關閉連線。 對於某些使用者端,您也可能會收到 查詢期間與MySQL伺服器的連線中斷 如果通訊封包太大,就會發生錯誤。

要再現的步驟

有各種不同的任務會產生此問題。 這可能包括嘗試將大量產品匯入Adobe Commerce或傳回太多資料的異動查詢。 結果是在中發生資料庫連線錯誤 var/log/exception.log 和其他問題,例如產品未成功匯入。

原因

MySQL的預設值為16MB max_allowed_packets 設定不夠大,無法滿足您的需求。

解決方案

  1. 識別個別列超過目前值的查詢 max_allowed_packet 限制。 這類查詢需要重寫以降低傳回的資料量。 若要這麼做,請減少中的欄數 SELECT 陳述式或為各種資料行選擇較小的資料型別,作為表格設計的一部分。 如果您有New Relic帳戶,請使用 New Relic APM錯誤頁面New Relic APM資料庫頁面、和 New Relic記錄檔 以搜尋相關查詢。

  2. 為了快速補救,您可以臨時請求 max_allowed_packet 大小將在下列情況下增加: 提交票證,但這是由客戶工程團隊自行決定,因為太大的值可能會導致網路阻塞,進而導致復寫失敗。

  3. 最佳實務是,您應該在CLI中針對某些大型資料庫表格執行下列命令:

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

    評估在這些表格上執行的查詢,以判斷您是否超過建議值 max_allowed_packet 大小為16MB。 請依照步驟一中的相同程式操作,以減少這類查詢傳回的資料。

相關閱讀

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