Il parametro max_allowed_packet in MariaDB è una variabile di sistema che definisce la dimensione massima di un pacchetto di dati inviato o ricevuto tra il server di database e un’applicazione. Se trasferisci file di grandi dimensioni, numerosi record o comandi SQL lunghi, senza una modifica di questo valore potresti presto imbatterti in alcuni limiti.

Che cos’è max_allowed_packet in MariaDB?

La variabile di sistema max_allowed_packet è uno dei principali parametri di configurazione in MariaDB e MySQL, fondamentale per garantire trasmissioni di dati stabili e affidabili. Stabilisce la dimensione massima di un singolo pacchetto di dati che un client (come un’applicazione o uno script SQL) può inviare al server MariaDB o ricevere da esso. Il valore predefinito può variare a seconda della versione, del sistema operativo o della distribuzione utilizzata.

Un pacchetto di dati può includere comandi SQL e contenuti scambiati tra client e server. Se un comando SQL, ad esempio un’istruzione INSERT molto ampia e con molti valori, oppure un BLOB (Binary Large Object) supera la dimensione consentita, il server restituisce un errore simile a questo:

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

Questa variabile serve a proteggere il server da richieste troppo grandi, che potrebbero causare instabilità o sovraccarichi. Al tempo stesso, ti permette di adattare la configurazione alle reali esigenze del tuo ambiente.

Ricorda che sia il server che il client hanno un proprio valore max_allowed_packet. La trasmissione funziona solo se entrambe le parti accettano pacchetti della dimensione definita. Se il server accetta pacchetti da 64 MB ma il client solo fino a 16 MB, non sarà comunque possibile trasferire pacchetti di dimensioni superiori a 16 MB.

Compute Engine
La soluzione IaaS ideale per i tuoi carichi di lavoro
  • vCPU estremamente vantaggiose e potenti core dedicati
  • Massima flessibilità senza periodo contrattuale minimo
  • Servizio di assistenza tecnica 24 ore su 24, 7 giorni su 7

La sintassi di max_allowed_packet in MariaDB

MariaDB consente modifiche temporanee e permanenti di max_allowed_packet. La sintassi varia a seconda dello scopo:

Modificare max_allowed_packet temporaneamente 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 connessione attiva.

Modificare max_allowed_packet globalmente (per il server)

Per modificare max_allowed_packet a livello di server per tutte le connessioni future, usa:

SET GLOBAL max_allowed_packet = 67108864;
sql

In questo modo MariaDB imposta il valore per tutte le connessioni future. Questa modifica è valida fino al riavvio del server e non influisce sulle connessioni già attive. È utile per un adattamento permanente durante il normale funzionamento.

Casi d’uso tipici di max_allowed_packet

In molti scenari, il valore predefinito di max_allowed_packet non è sufficiente, soprattutto con operazioni intensive o automatizzate, dove un valore troppo basso può causare errori o interruzioni. I seguenti casi d’uso rappresentano situazioni tipiche in cui una modifica del valore si rivela opportuna:

  • Import di dump SQL molto grandi: durante il ripristino di backup o dump di database molto voluminosi, il limite predefinito potrebbe causare errori. Aumentando il valore si riducono le probabilità che l’operazione fallisca.
  • Gestione di BLOB di grandi dimensioni: le applicazioni che memorizzano file binari (come PDF, immagini, archivi ZIP) nel database richiedono spesso un valore max_allowed_packet maggiore.
  • Istruzioni INSERT con molti valori: quando grandi quantità di dati vengono scritti in un unico statement, ad esempio nei processi ETL o nei caricamenti di massa, una singola istruzione può diventare molto pesante.
  • Applicazioni web con moduli dinamici o caricamenti di file: alcuni framework generano automaticamente istruzioni SQL di grandi dimensioni che superano facilmente i limiti standard.

Fai attenzione a non alzare il valore di max_allowed_packet più del necessario: un valore troppo elevato può aumentare il consumo di memoria e compromettere la stabilità del sistema. Per la maggior parte degli scenari produttivi, un valore compreso tra 16M e 64M è sufficiente. Usa valori superiori solo in casi eccezionali, come le migrazioni di database o l’importazione di dati particolarmente voluminosi.

Esempio di utilizzo di max_allowed_packet

Supponiamo che la tua applicazione web consenta il caricamento di file PDF fino a 64 MB. Se il valore predefinito di max_allowed_packet è di 4 MB, l’operazione fallirebbe. Per garantire il funzionamento affidabile dell’applicazione, è necessario modificare 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’applicazione è ora in grado di elaborare senza problemi pacchetti di dati fino a 64 megabyte. Ciò evita errori, migliora la stabilità e consente un funzionamento regolare anche in caso di trasferimenti di dati di grandi dimensioni.

Managed Database Services
Concentrati sul tuo progetto, noi pensiamo al resto
  • Partner IONOS Cloud
  • Soluzioni flessibili e su misura
  • Data center situati in Europa
Hai trovato questo articolo utile?
Vai al menu principale