# Risolvere l’errore “too many connections” in MySQL/MariaDB

L’errore “too many connections” (o “Troppe connessioni”) in MySQL appare quando il numero massimo di connessioni simultanee consentite al server viene superato. Ogni client attivo utilizza una connessione e, una volta raggiunto il limite, non si possono stabilire nuove connessioni. Le cause frequenti sono molte query in esecuzione parallela, connessioni non correttamente chiuse o un valore `max_connections` impostato troppo basso sul server.

## Come si verifica l’errore “too many connections” in MySQL/MariaDB?

Un [database](https://www.ionos.it/digitalguide/hosting/tecniche-hosting/database/) può gestire solo un numero limitato di richieste contemporanee. Se questo **valore massimo viene superato**, [MySQL](https://www.ionos.it/digitalguide/server/know-how/cose-mysql/) o [MariaDB](https://www.ionos.it/digitalguide/server/know-how/cose-mariadb/) mostreranno l’errore “too many connections”. Ciò può accadere, per esempio, se uno script [PHP](https://www.ionos.it/digitalguide/siti-web/creare-siti/imparare-a-programmare-in-php-tutorial-per-principianti/) cerca di stabilire troppe connessioni simultanee con il [database relazionale](https://www.ionos.it/digitalguide/hosting/tecniche-hosting/database-relazionale/). Anche se hai un’applicazione web che utilizza un database MySQL, è possibile che, in caso di **elevata richiesta**, si verifichi l’errore “too many connections” in MySQL.

## “Troppe connessioni”: come risolvere l’errore MySQL/MariaDB

Ci sono diversi approcci per risolvere l’errore “too many connections”, a seconda di dove si trovi esattamente il problema. Di seguito vengono spiegati dettagliatamente i metodi di risoluzione più comuni.

### Soluzione 1: selezionare un nuovo numero massimo di connessioni

La **variabile di sistema** `max_connections` determina il numero di connessioni che MySQL/MariaDB accetta. Il valore predefinito è di 151 connessioni, che consente 150 connessioni normali più una connessione dall’**account SUPER**. SUPER è un privilegio MySQL che assegna permessi di amministrazione all’utente.

Per prima cosa devi decidere quale nuovo valore massimo vuoi impostare per `max_connections`. Ci sono diverse considerazioni da fare quando si aumenta il numero di connessioni MySQL/MariaDB. Il numero massimo supportato dal sistema dipende dai seguenti fattori:

- La quantità di [memoria RAM disponibile](https://www.ionos.it/digitalguide/server/know-how/che-cose-la-memoria-ad-accesso-casuale-ram/)
- Quantità di RAM necessaria per ogni connessione (le query semplici richiedono meno RAM rispetto alle connessioni più impegnative)
- Il tempo di risposta accettabile

Secondo la [documentazione MySQL](https://dev.mysql.com/doc/refman/8.0/en/too-many-connections.html "Documentazione di MySQL"), la maggior parte dei sistemi Linux dovrebbe poter supportare facilmente **500-1.000 connessioni**.

#### Regolazione permanente di `max_connections`

Per modificare permanentemente la variabile `max_connections`, devi aggiornare il file `my.cnf` o `my.ini`.

Apri il file /etc/my.cnf per la modifica con il comando:

```none
sudo nano /etc/my.cnf
```

Subito sotto la prima riga vedrai la seguente voce:

```none
[mysqld]
```

Aggiungi una nuova voce:

```none
max_connections=[desired new maximum number]
```

#### Regolazione temporanea di `max_connections`

Per modificare temporaneamente il numero massimo di connessioni solo per la connessione in corso, puoi eseguire il seguente comando nella console MySQL:

```none
SET GLOBAL max_connections = [desired new maximum number];
```

La modifica è valida fino al riavvio del server SQL.

### Soluzione 2: interrompere le connessioni non utilizzate

Un altro motivo comune per l’errore “too many connections” è che le applicazioni non interrompono correttamente le connessioni al database. Ogni connessione aperta occupa uno slot in MySQL o MariaDB e, se le connessioni non vengono rilasciate, il server può rapidamente raggiungere il numero massimo consentito.

Pertanto, in PHP dovresti sempre chiamare `mysqli_close($connection)` dopo aver utilizzato una connessione, appena le query sono completate. In Python, si dovrebbe utilizzare il comando equivalente `connection.close()`. Le applicazioni Node.js dovrebbero usare `connection.end()`.

Un altro approccio collaudato è l’uso dei **connection pools**. In questo caso, un numero definito di connessioni al database viene gestito centralmente e riutilizzato, anziché aprire una nuova connessione per ogni richiesta. Questo non solo riduce il carico sul server, ma aumenta anche le prestazioni, poiché stabilire e interrompere una connessione richiede tempo.

### Soluzione 3: adattare il timeout per le connessioni

Un altro metodo efficace per evitare l’errore “too many connections” è limitare la durata massima delle connessioni inattive. Per impostazione predefinita, MySQL/MariaDB mantiene aperte le connessioni inattive per un periodo relativamente lungo, anche se non eseguono più query. Tuttavia, ognuna di queste connessioni inattive continua a occupare uno slot.

Le variabili di sistema `wait_timeout` e `interactive_timeout` determinano per quanto tempo le connessioni inattive rimangono attive prima di essere automaticamente terminate dal server. `wait_timeout` si applica alle connessioni normali, mentre `interactive_timeout` è utilizzato per le connessioni da client interattivi, come la console MySQL. Riducendo questi valori, le connessioni “appese” vengono rilasciate più rapidamente.

#### Adattamento permanente

L’adattamento può essere effettuato in modo permanente nel file di configurazione `my.cnf` o `my.ini`. Apri questo file e cerca la seguente voce:

```none
[mysqld]
```

Inserisci le seguenti righe:

```none
wait_timeout=120
interactive_timeout=120
```

In questo modo, ti assicuri che le connessioni inattive non blocchino inutilmente le risorse per un periodo prolungato.

#### Adattamento temporaneo

Questo adattamento può essere effettuato temporaneamente anche tramite la console MySQL. In questo caso, la modifica sarà valida solo per la connessione in corso e i valori verranno reimpostati al riavvio del server SQL.

```none
SET GLOBAL wait_timeout=120;
SET GLOBAL interactive_timeout=120;
```


This is a markdown version of: [https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/risolvere-lerrore-troppe-connessioni-di-mysqlmariadb/](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/risolvere-lerrore-troppe-connessioni-di-mysqlmariadb/) for AI/LLM consumption.