Il parametro max_allowed_packet in MariaDB è una variabile di sistema che definisce la di­men­sio­ne massima di un pacchetto di dati inviato o ricevuto tra il server di database e un’ap­pli­ca­zio­ne. Se tra­sfe­ri­sci file di grandi di­men­sio­ni, numerosi record o comandi SQL lunghi, senza una modifica di questo valore potresti presto im­bat­ter­ti in alcuni limiti.

Che cos’è max_allowed_packet in MariaDB?

La variabile di sistema max_allowed_packet è uno dei prin­ci­pa­li parametri di con­fi­gu­ra­zio­ne in MariaDB e MySQL, fon­da­men­ta­le per garantire tra­smis­sio­ni di dati stabili e af­fi­da­bi­li. Sta­bi­li­sce la di­men­sio­ne massima di un singolo pacchetto di dati che un client (come un’ap­pli­ca­zio­ne o uno script SQL) può inviare al server MariaDB o ricevere da esso. Il valore pre­de­fi­ni­to può variare a seconda della versione, del sistema operativo o della di­stri­bu­zio­ne uti­liz­za­ta.

Un pacchetto di dati può includere comandi SQL e contenuti scambiati tra client e server. Se un comando SQL, ad esempio un’istru­zio­ne INSERT molto ampia e con molti valori, oppure un BLOB (Binary Large Object) supera la di­men­sio­ne con­sen­ti­ta, il server re­sti­tui­sce un errore simile a questo:

ERROR 1153 (08S01): Got a packet bigger than 'max_allowed_packet' bytes
sql

Questa variabile serve a pro­teg­ge­re il server da richieste troppo grandi, che po­treb­be­ro causare in­sta­bi­li­tà o so­vrac­ca­ri­chi. Al tempo stesso, ti permette di adattare la con­fi­gu­ra­zio­ne alle reali esigenze del tuo ambiente.

Ricorda che sia il server che il client hanno un proprio valore max_allowed_packet. La tra­smis­sio­ne funziona solo se entrambe le parti accettano pacchetti della di­men­sio­ne definita. Se il server accetta pacchetti da 64 MB ma il client solo fino a 16 MB, non sarà comunque possibile tra­sfe­ri­re pacchetti di di­men­sio­ni superiori a 16 MB.

Compute Engine
La soluzione IaaS ideale per i tuoi carichi di lavoro
  • vCPU estre­ma­men­te van­tag­gio­se e potenti core dedicati
  • Massima fles­si­bi­li­tà senza periodo con­trat­tua­le minimo
  • Servizio di as­si­sten­za tecnica 24 ore su 24, 7 giorni su 7

La sintassi di max_allowed_packet in MariaDB

MariaDB consente modifiche tem­po­ra­nee e per­ma­nen­ti di max_allowed_packet. La sintassi varia a seconda dello scopo:

Mo­di­fi­ca­re max_allowed_packet tem­po­ra­nea­men­te per una sessione

Se desideri cambiare il valore di max_allowed_packet solo per una singola sessione, puoi farlo così:

SET SESSION max_allowed_packet = 67108864;
sql

Con questo comando imposti il limite a 64 MB, ma solo per la con­nes­sio­ne attiva.

Mo­di­fi­ca­re max_allowed_packet glo­bal­men­te (per il server)

Per mo­di­fi­ca­re max_allowed_packet a livello di server per tutte le con­nes­sio­ni future, usa:

SET GLOBAL max_allowed_packet = 67108864;
sql

In questo modo MariaDB imposta il valore per tutte le con­nes­sio­ni future. Questa modifica è valida fino al riavvio del server e non influisce sulle con­nes­sio­ni già attive. È utile per un adat­ta­men­to per­ma­nen­te durante il normale fun­zio­na­men­to.

Casi d’uso tipici di max_allowed_packet

In molti scenari, il valore pre­de­fi­ni­to di max_allowed_packet non è suf­fi­cien­te, so­prat­tut­to con ope­ra­zio­ni intensive o au­to­ma­tiz­za­te, dove un valore troppo basso può causare errori o in­ter­ru­zio­ni. I seguenti casi d’uso rap­pre­sen­ta­no si­tua­zio­ni tipiche in cui una modifica del valore si rivela opportuna:

  • Import di dump SQL molto grandi: durante il ri­pri­sti­no di backup o dump di database molto vo­lu­mi­no­si, il limite pre­de­fi­ni­to potrebbe causare errori. Au­men­tan­do il valore si riducono le pro­ba­bi­li­tà che l’ope­ra­zio­ne fallisca.
  • Gestione di BLOB di grandi di­men­sio­ni: le ap­pli­ca­zio­ni che me­mo­riz­za­no file binari (come PDF, immagini, archivi ZIP) nel database ri­chie­do­no spesso un valore max_allowed_packet maggiore.
  • Istru­zio­ni INSERT con molti valori: quando grandi quantità di dati vengono scritti in un unico statement, ad esempio nei processi ETL o nei ca­ri­ca­men­ti di massa, una singola istru­zio­ne può diventare molto pesante.
  • Ap­pli­ca­zio­ni web con moduli dinamici o ca­ri­ca­men­ti di file: alcuni framework generano au­to­ma­ti­ca­men­te istru­zio­ni SQL di grandi di­men­sio­ni che superano fa­cil­men­te i limiti standard.

Fai at­ten­zio­ne a non alzare il valore di max_allowed_packet più del ne­ces­sa­rio: un valore troppo elevato può aumentare il consumo di memoria e com­pro­met­te­re la stabilità del sistema. Per la maggior parte degli scenari pro­dut­ti­vi, un valore compreso tra 16M e 64M è suf­fi­cien­te. Usa valori superiori solo in casi ec­ce­zio­na­li, come le mi­gra­zio­ni di database o l’im­por­ta­zio­ne di dati par­ti­co­lar­men­te vo­lu­mi­no­si.

Esempio di utilizzo di max_allowed_packet

Sup­po­nia­mo che la tua ap­pli­ca­zio­ne web consenta il ca­ri­ca­men­to di file PDF fino a 64 MB. Se il valore pre­de­fi­ni­to di max_allowed_packet è di 4 MB, l’ope­ra­zio­ne fal­li­reb­be. Per garantire il fun­zio­na­men­to af­fi­da­bi­le dell’ap­pli­ca­zio­ne, è ne­ces­sa­rio mo­di­fi­ca­re il valore.

Apri il file /etc/mysql/my.cnf su Linux, oppure my.ini su Windows. Aggiungi questa riga nella sezione [mysqld]:

max_allowed_packet=64M
txt

Riavvia il server MariaDB:

sudo systemctl restart mariadb
bash

Poi verifica il nuovo valore con:

SHOW VARIABLES LIKE 'max_allowed_packet';
sql

Come risultato otteniamo:

+---------------------+----------+
| Variable_name       | Value    |
+---------------------+----------+
| max_allowed_packet  | 67108864 |
+---------------------+----------+
sql

L’ap­pli­ca­zio­ne è ora in grado di elaborare senza problemi pacchetti di dati fino a 64 megabyte. Ciò evita errori, migliora la stabilità e consente un fun­zio­na­men­to regolare anche in caso di tra­sfe­ri­men­ti di dati di grandi di­men­sio­ni.

Managed Database Services
Con­cen­tra­ti sul tuo progetto, noi pensiamo al resto
  • Partner IONOS Cloud
  • Soluzioni fles­si­bi­li e su misura
  • Data center situati in Europa
Vai al menu prin­ci­pa­le