# MariaDB max\_allowed\_packet: come impostare la dimensione massima dei pacchetti di dati

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](https://www.ionos.it/digitalguide/server/know-how/cose-mariadb/) e [MySQL](https://www.ionos.it/digitalguide/server/know-how/imparare-a-utilizzare-mysql-guida-per-principianti/), 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](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/binary-large-object/) (Binary Large Object) supera la dimensione consentita, il server restituisce un errore simile a questo:

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

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.

## 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ì:

```sql
SET SESSION max_allowed_packet = 67108864;
```

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:

```sql
SET GLOBAL max_allowed_packet = 67108864;
```

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]`:

```txt
max_allowed_packet=64M
```

Riavvia il server MariaDB:

```bash
sudo systemctl restart mariadb
```

Poi verifica il nuovo valore con:

```sql
SHOW VARIABLES LIKE 'max_allowed_packet';
```

Come risultato otteniamo:

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

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.


This is a markdown version of: [https://www.ionos.it/digitalguide/hosting/tecniche-hosting/mariadb-max-allowed-packet/](https://www.ionos.it/digitalguide/hosting/tecniche-hosting/mariadb-max-allowed-packet/) for AI/LLM consumption.