Come aumento il limite massimo delle connessioni dell'istanza Amazon RDS for MySQL?

Ultimo aggiornamento: 27/08/2021

Desidero aumentare il limite massimo delle connessioni del mio Amazon Relational Database Service (Amazon RDS) per l'istanza MySQL. Come posso farlo e quali sono alcune best practice per l'utilizzo del parametro max_connections?

Risoluzione

In Amazon RDS for MySQL, il parametro max_connections monitora il numero massimo impostato di connessioni client simultanee (permesse).

Di default, il parametro max_connections si basa sulla seguente formula in Amazon RDS for MySQL (calcolata dal valore DBInstanceClassMemory):

max_connections = DBInstanceClassMemory/12582880

Il valore di default max_connections dipende dalla classe di istanza utilizzata dall'istanza di Amazon RDS. Una classe di istanza database con più memoria disponibile supporta anche un numero maggiore di connessioni al database.

Per controllare il valore corrente di max_connections, esegui il seguente comando dopo la connessione all'istanza Amazon RDS for MySQL:

SHOW GLOBAL VARIABLES LIKE 'max_connections';

Quando le connessioni client superano il valore max_connections, viene visualizzato un errore "Troppe connessioni".

I seguenti fattori possono far sì che le connessioni al database superino il valore max_connections:

  • Aumento del numero di connessioni client/applicazione all'istanza database, causato da un aumento del carico di lavoro o dal blocco a livello di tabella/riga.
  • Chiusura errata di una connessione client/applicazione dopo la fine di un'operazione. Quando una connessione al server non viene chiusa correttamente, l'applicazione client apre una nuova connessione. Nel corso del tempo, queste nuove connessioni del server possono far sì che l'istanza superi il valore max_connections. Per elencare tutte le connessioni attive nell'istanza database MySQL, utilizza il comando SHOW FULL PROCESSLIST.
  • Le connessioni in sospensione (note anche come connessioni aperte inattive) sono causate da parametri di timeout di connessione più elevati (come wait_timeout o interactive_timeout). Se configuri un limite di connessione troppo alto, puoi ottenere un maggiore utilizzo della memoria anche se tali connessioni non vengono utilizzate. Di conseguenza, quando il server dell'applicazione tenta di aprire tutte le connessioni client al database, queste connessioni potrebbero essere rifiutate. Per terminare una connessione in sospensione, utilizza l'operazione mysql.rds_kill.
    Suggerimento: è da considerarsi best practice configurare solo le connessioni attive necessarie per le prestazioni dell'applicazione. Potresti anche prendere in considerazione l'aggiornamento a una classe di istanze database Amazon RDS più ampia.

Aumentare il parametro max_connections_parameter dell'istanza Amazon RDS for MySQL

Puoi aumentare il numero massimo di connessioni all'istanza database utilizzando i seguenti metodi:

  • Dimensiona l'istanza database fino a una classe di istanza database con più memoria.
    Avvertenza: i tempi di inattività si verificano quando modifichi un'istanza database di Amazon RDS.
  • Imposta un valore maggiore per il parametro max_connections utilizzando un gruppo di parametri personalizzato a livello di istanza. L'aumento del parametro max_connections non causa alcuna interruzione.
  • Se l'istanza database utilizza un gruppo di parametri di default, modifica il gruppo di parametri in un gruppo di parametri personalizzato. Assicurati di associare il gruppo di parametri del database personalizzato all'istanza Amazon RDS for MySQL e riavvia l'istanza. Dopo aver associato il nuovo gruppo di parametri personalizzato all'istanza database, puoi modificare il valore del parametro max_connections.
    Nota: la modifica del gruppo di parametri può causare un'interruzione. Per ulteriori informazioni, consulta Utilizzo dei gruppi di parametri del database.

Per creare un gruppo di parametri personalizzato e modificare il parametro max_connections, consulta Come modifico i valori di un gruppo di parametri del database di Amazon RDS?

Best practice per la configurazione del parametro max_connections

Quando lavori con il parametro max_connections per l'istanza database, tieni conto delle seguenti best practice:

  • I limiti di connessione di default vengono regolati per i sistemi che utilizzano i valori di default per altri principali utenti di memoria (ad esempio il pool di buffer). Una best practice consiste nell’aumentare la classe di istanza, invece di modificare il valore della classe di istanza. Tuttavia, se le istanze hanno molta memoria libera, puoi modificare manualmente questo parametro. Se modifichi queste impostazioni per l'istanza database, prendi in considerazione la possibilità di regolare il limite di connessione per tenere conto dell'aumento o della diminuzione della memoria disponibile nelle istanze database.
  • Imposta il valore max_connections leggermente più alto rispetto al numero massimo di connessioni che prevedi di aprire in ogni istanza database.
  • Se hai abilitato anche Performance Schema, presta molta attenzione all'impostazione del parametro max_connections. Le strutture di memoria di Performance Schema vengono ridimensionate automaticamente in base alle variabili di configurazione del server. Maggiore è l'impostazione della variabile, maggiore sarà la quantità di memoria utilizzata da Performance Schema. In casi estremi, ciò può causare problemi di memoria insufficiente su tipi di istanze più piccoli come T2 e T3. Se utilizzi Performance Schema, è da considerarsi best practice lasciare l'impostazione max_connections sul valore di default. Se prevedi di aumentare in modo significativo il valore max_connections (a un valore superiore al valore di default), valuta la possibilità di disabilitare Performance Schema.
    Nota: se abiliti Performance Insights per un'istanza database Amazon RDS for MySQL, anche Performance Schema viene abilitato automaticamente.
  • Quando regoli il parametro max_connections, assicurati di rivedere anche i seguenti parametri relativi alla connessione MySQL:
    wait_timeout: numero di secondi in cui il server attende l'attività su una connessione a file TCP/IP o Unix non interattiva prima di chiuderla.
    interactive_timeout: numero di secondi in cui il server attende l'attività su una connessione interattiva prima di chiuderla.
    net_read_timeout: numero di secondi di attesa di ulteriori dati da una connessione TCP/IP prima di eliminare la lettura.
    net_write_timeout: numero di secondi di attesa sulle connessioni TCP/IP per la scrittura di un blocco prima di eliminare la scrittura.
    max_execution_time: timeout di esecuzione per le istruzioni SELECT, in millisecondi.
    max_connect_errors: un host è bloccato da ulteriori connessioni se vi sono più di questo numero di connessioni interrotte.
    max_user_connections: numero massimo di connessioni simultanee permesse a un determinato account MySQL.

Nota: questo articolo non include i valori consigliati per i parametri elencati perché questi valori variano in base al caso d'uso.


Questo articolo è stato utile?


Hai bisogno di supporto tecnico o per la fatturazione?