Errori di database relativi a max_allowed_packet su Adobe Commerce

Questo articolo fornisce una soluzione per gli errori di connessione al database in var/log/exception.log che possono verificarsi quando si importa un numero elevato di prodotti o si esegue un'altra operazione che impone al server di gestire pacchetti più grandi di quelli impostati in max_allowed_packet maggiore del valore predefinito, 16 MB.

Prodotti e versioni interessati

Problema

Quando un client MySQL o mysqld il server riceve un pacchetto maggiore di max_allowed_packet byte, emette un ER_NET_PACKET_TOO_LARGE (che può essere visualizzato nella sezione exception.log) e chiude la connessione. Con alcuni clienti, puoi anche ottenere un Connessione interrotta al server MySQL durante la query errore se il pacchetto di comunicazione è troppo grande.

Passaggi da riprodurre

Questo problema può essere generato da diverse attività. Ad esempio, puoi tentare di importare un numero elevato di prodotti in Adobe Commerce o eseguire query transazionali per restituire una quantità eccessiva di dati. Il risultato sono errori di connessione al database in var/log/exception.log e altri problemi, come la mancata importazione dei prodotti.

Causa

Il valore predefinito di 16 MB per MySQL max_allowed_packets l'impostazione non è abbastanza grande per le tue esigenze.

Soluzione

  1. Identifica le query in cui le singole righe superano la corrente max_allowed_packet limite. Tali query devono essere riscritte per ridurre la quantità di dati restituiti. Questo può essere fatto con un numero inferiore di colonne nel SELECT o scegliendo un tipo di dati più piccolo per varie colonne come parte della struttura della tabella. Se disponi di un account New Relic, utilizza Pagina Errori New Relic APM e Pagina Database New Relic APM, e Registri New Relic per cercare le query rilevanti.

  2. Per una correzione rapida, puoi richiedere temporaneamente max_allowed_packet dimensioni da aumentare quando invia un ticket, ma a discrezione del team di progettazione del cliente, in quanto un valore troppo grande può causare errori di replica causando congestione della rete.

  3. Come best practice, è consigliabile eseguire il comando seguente nella CLI per alcune tabelle di database di grandi dimensioni:

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

    Valuta le query in esecuzione su queste tabelle per determinare se stai superando il limite consigliato max_allowed_packet 16 MB. Segui lo stesso processo nel passaggio 1 per ridurre i dati restituiti da tali query.

Lettura correlata

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