Perché ricevo l'errore "Too Many Connections" quando mi connetto alla mia istanza Amazon Aurora MySQL?

7 minuti di lettura
0

Sto cercando di connettermi alla mia istanza database Amazon Aurora MySQL e ricevo l'errore "Too Many Connections". Qual è il valore massimo di connessione per la mia istanza database e come posso regolarlo?

Breve descrizione

Se il client rileva l'errore "Too Many Connections" quando provi a connetterti a un cluster o a un'istanza database Amazon Aurora MySQL, significa che tutte le connessioni disponibili sono utilizzate da altri client. L'errore è definito dal parametro max_connections.

Potresti vedere uno dei seguenti sintomi:

  • La metrica DatabaseConnections in Amazon CloudWatch è vicina o uguale al valore max_connections per l'istanza database Aurora MySQL.
  • Il valore del parametro max_connections è superiore alla memoria disponibile fornita dalla classe di istanza database per le connessioni. Verifica la presenza di segni come un valore basso della metrica FreeableMemory in CloudWatch.
  • Viene visualizzato un errore ERROR 1040(): Too many connections nel log degli errori di MySQL.

È possibile raggiungere un valore max_connections per i seguenti motivi:

  • Aumento improvviso o graduale del numero di connessioni client/applicazione all'istanza database. Ciò ha le seguenti cause:
    • Aumento del carico di lavoro con conseguente aumento delle connessioni.
    • Blocco a livello di tabella/riga che porta a un aumento della connessione client/applicazione.
  • Il client/applicazione non chiude correttamente le connessioni dopo la fine dell'operazione.
  • Valore più elevato per i parametri di timeout della connessione come wait_timeout e/o interactive_timeout che può portare a un aumento delle connessioni in sospensione.

Prima di risolvere l'errore massimo di connessione, per prima cosa visualizza tutti i thread attualmente in esecuzione sulla tua istanza database. Quindi, abilita la registrazione sulla tua istanza database.

Mostra i thread attualmente in esecuzione sull'istanza database di Aurora MySQL

Il comando SHOW FULL PROCESSLIST mostra quali thread sono attualmente in esecuzione sull'istanza database. Accedi alla tua istanza database, quindi esegui la seguente query:

SHOW FULL PROCESSLIST\G

Puoi anche eseguire la seguente query per ottenere lo stesso set di risultati:

SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST

Nota: È necessario concedere al proprio account utente il privilegio di amministrazione affinché il server MySQL PROCESS possa visualizzare tutti i thread in esecuzione su un'istanza database MySQL. Altrimenti, SHOW PROCESSLIST mostra solo i thread associati all'account MySQL che stai utilizzando. Per ulteriori informazioni, consulta la documentazione MySQL sui Privilegi forniti da MySQL.

Nota: Le istruzioni SHOW FULL PROCESSLIST e INFORMATION_SCHEMA.PROCESSLIST possono influire negativamente sulle prestazioni perché richiedono un mutex.

Abilita la registrazione sull'istanza database di Aurora MySQL

Abilita la registrazione sull'istanza database di Aurora MySQL abilitando general_log, slow_query_log o i parametri avanzati del log di controllo.

Soluzione

Risolvi l'errore massimo di connessione utilizzando uno dei seguenti metodi:

  • Rivedi le connessioni esistenti e, se possibile, interrompile per allentare la pressione di connessione. Ad esempio, inizia interrompendo le connessioni in stato di sospensione.
  • Aumenta il numero massimo di connessioni alla tua istanza database.

Interrompi le connessioni esistenti sulla tua istanza database

Interrompi le sessioni utente o le query attualmente in esecuzione sulla tua istanza database eseguendo i comandi rds_kill e rds_kill_query:

CALL mysql.rds_kill(thread-ID);
CALL mysql.rds_kill_query(thread-ID);

Aumenta il numero massimo di connessioni alla tua istanza database

Aumenta il numero massimo di connessioni alla tua istanza database utilizzando i seguenti metodi:

  • Dimensiona l'istanza fino a una classe di istanza database con più memoriaNota: Il dimensionamento della classe di istanza database causa un'interruzione.
  • 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 un'interruzione, ma se l'istanza database utilizza un gruppo di parametri predefinito, cambia il gruppo di parametri con un gruppo di parametri personalizzato. La modifica del gruppo di parametri causa un'interruzione. Per ulteriori informazioni, consulta Utilizzo dei gruppi di parametri database.

Nota: Il numero massimo di connessioni consentite a un'istanza database di Aurora MySQL è determinato dal parametro max_connections nel gruppo di parametri a livello di istanza per l'istanza database. Guarda il seguente esempio:

max_connections = GREATEST({log(DBInstanceClassMemory/805306368)*45},{log(DBInstanceClassMemory/8187281408)*1000})

Controlla il valore corrente del parametro max_connections per la tua istanza database. Per fare ciò, controlla il gruppo di parametri associato alla tua istanza database o esegui la seguente query:

select @@max_connections;

Il parametro max_connections ha le seguenti specifiche:

  • Può essere impostato sia sul cluster database che sul gruppo di parametri dell'istanza database. Tuttavia, l'impostazione dei parametri a livello di istanza ha effetto.
  • Il valore consentito è un numero intero compreso tra 1 e 16000.
  • Di natura dinamica (non è richiesto il riavvio per modificare il valore di questo parametro).

Per ulteriori informazioni sul valore predefinito di max_connections per ogni classe di istanza database disponibile per Aurora MySQL, consulta Numero massimo di connessioni a un'istanza database Aurora MySQL.

Nota: Le istanze database Aurora MySQL e Amazon Relational Database Service (Amazon RDS) presentano un sovraccarico di memoria diverso. Il valore max_connections può essere diverso per le istanze database Aurora MySQL e RDS MySQL che utilizzano la stessa classe di istanza. I valori elencati si applicano solo a Aurora MySQL.

Procedure consigliate per l'ottimizzazione del parametro max_connections

Assicurati di considerare quanto segue quando lavori con il parametro max_connections per la tua istanza database.

  • I limiti di connessione predefiniti sono regolati per i sistemi che utilizzano i valori predefiniti per altri principali consumatori di memoria, come il pool di buffer e la cache delle query. Se modifichi queste impostazioni per il tuo cluster database, valuta la possibilità di regolare il limite di connessione per tenere conto dell'aumento o della diminuzione della memoria disponibile sulle istanze database.
  • Imposta max_connections su un valore leggermente superiore al numero massimo di connessioni che prevedi di aprire su ogni istanza database.
  • Se hai abilitato anche performance_schema, fai attenzione all'impostazione del parametro max_connections. Le strutture di memoria di Performance Schema vengono dimensionate automaticamente in base alle variabili di configurazione del server, tra cui max_connections. Più in alto si imposta la variabile, maggiore è la quantità di memoria utilizzata da Performance Schema. In casi estremi, ciò può causare problemi di esaurimento della memoria su tipi di istanze più piccoli, come T2 e T3. È consigliabile mantenere max_connections sul valore predefinito se si utilizza Performance Schema. Se prevedi di aumentare max_connections a un valore significativamente superiore al valore predefinito, valuta la possibilità di disabilitare Performance Schema. Nota: Se abiliti Performance Insights per un'istanza database di Aurora MySQL, viene abilitato automaticamente Performance Schema.

Puoi anche considerare i seguenti parametri di connessione MySQL per l'ottimizzazione:

  • wait_timeout: Numero di secondi in cui il server attende l'attività su una connessione TCP/IP o UNIX File 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 per ulteriori dati da una connessione TCP/IP prima di interrompere la lettura.
  • net_write_timeout: Numero di secondi di attesa sulle connessioni TCP/IP per la scrittura di un blocco prima di interrompere la scrittura.
  • max_execution_time: Timeout di esecuzione per le istruzioni SELECT, in millisecondi.
  • max_connect_errors: Un host viene bloccato da ulteriori connessioni se il numero di connessioni interrotte è superiore a questo.
  • max_user_connections: Numero massimo di connessioni simultanee consentite a un determinato account MySQL.

Nota: Questo articolo non include valori consigliati o personalizzati per questi parametri, poiché questi valori variano in base ai singoli casi d'uso.


Informazioni correlate

Numero massimo di connessioni a un'istanza database Aurora MySQL

Come posso controllare le query in esecuzione per la mia istanza database Amazon RDS MySQL?

Termine di una sessione o di una query

AWS UFFICIALE
AWS UFFICIALEAggiornata 3 anni fa