Come posso aumentare il numero massimo di connessioni della mia istanza Amazon RDS per MySQL o Amazon RDS per PostgreSQL?
Desidero aumentare il numero massimo di connessioni per la mia istanza database Amazon Relational Database Service (Amazon RDS) per MySQL o Amazon RDS per PostgreSQL.
Risoluzione
Nota: prima di aumentare il numero massimo di connessioni, è consigliabile ottimizzare le configurazioni esistenti.
Controlla il valore attuale di max_connections
La metrica max_connections imposta il numero massimo di connessioni al database sia per RDS per MySQL che per RDS per PostgreSQL. Il valore predefinito di max_connections dipende dalla classe di istanza utilizzata dall'istanza Amazon RDS. Una classe di istanza database con più memoria disponibile può avere un numero maggiore di connessioni al database.
Per verificare il valore di max_connections, connettiti all'istanza database di Amazon RDS per il tuo motore DB ed esegui il comando seguente.
-
RDS per MySQL:
SHOW GLOBAL VARIABLES LIKE 'max_connections';
-
RDS per PostgreSQL:
postgres=> show max_connections;
Nota: il numero predefinito di max_connections calcolato con una formula può variare leggermente rispetto all'output dei comandi precedenti. Questa variabilità è dovuta al fatto che Amazon RDS riserva una parte della memoria totale DBInstanceClassMemory per le operazioni del sistema operativo sottostanti. I comandi precedenti utilizzano solo la memoria riservata al motore PostgreSQL e non al sistema operativo host sottostante.
Ottimizza le connessioni esistenti
Prima di aumentare il valore di max_connections, verifica se è possibile ridurre il numero di connessioni esistenti. Quando il numero di connessioni client supera il valore max_connections, viene visualizzato uno dei seguenti errori:
- MySQL: Errore "Too many connections"
- PostgreSQL: "FATAL: remaining connection slots are reserved for non replicate superuser connections"
Questi errori possono verificarsi quando Amazon RDS ha un carico di lavoro aumentato o ha un blocco a livello di tabella o riga. Se il carico di lavoro sulla tua istanza funziona come previsto, devi aumentare il parametro max_connections.
Verifica di aver chiuso tutte le connessioni del client e dell'applicazione dopo la fine di un'operazione
Quando una connessione al server non viene chiusa, l'applicazione client apre una nuova connessione. Nel tempo, queste nuove connessioni al server possono far sì che l'istanza superi il valore max_connections.
Per elencare tutte le connessioni per la tua istanza database RDS per MySQL, esegui il seguente comando:
SHOW FULL PROCESSLIST;
Per visualizzare le connessioni per ogni database per la tua istanza RDS per PostgreSQL, esegui il seguente comando:
SELECT datname, numbackends FROM pg_stat_database;
(Solo MySQL) Verifica la presenza di connessioni inattive
Le connessioni aperte in stato di sospensione o inattive si verificano quando si impostano valori più alti per i parametri di timeout della connessione, come wait_timeout o interactive_timeout. Se configuri una quota di connessione elevata, l'utilizzo della memoria potrebbe essere elevato anche se non utilizzi tali connessioni.
Per visualizzare le connessioni inattive in un'istanza RDS per MySQL, esegui la seguente query:
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST WHERE COMMAND='Sleep';
Per terminare una connessione inattiva in un'istanza database RDS per MySQL, esegui il seguente comando:
CALL mysql.rds_kill(example-pid);
(Solo PostgreSQL) Verifica se vi sono connessioni inattive
Per visualizzare le connessioni inattive in un'istanza RDS per PostgreSQL, esegui la seguente query:
SELECT * FROM pg_stat_activity WHERE pid <> pg_backend_pid() AND state in ('idle', 'idle in transaction', 'idle in transaction (aborted)', 'disabled') AND state_change < current_timestamp - INTERVAL '15' MINUTE;
L'output della query mostra i processi di backend che sono nello stato inattivo, inattivo nella transazione, inattivo nella transazione (interrotto) o disabilitato da oltre 15 minuti.
Per terminare una connessione inattiva in un'istanza RDS per PostgreSQL, esegui il comando seguente:
SELECT pg_terminate_backend(example-pid);
Nota: è consigliabile configurare solo le connessioni attive necessarie per le prestazioni dell'applicazione. Se la struttura dell'applicazione richiede connessioni inattive, è consigliabile utilizzare Amazon RDS Proxy.
Aumenta il numero massimo di connessioni
Nota: quando aumenti le capacità di un'istanza, riscontrerai tempi di inattività e cambiamenti nella fatturazione.
Per aumentare il numero massimo di connessioni, è consigliabile passare a una classe di istanza database con più memoria. Non è consigliabile aumentare il parametro max_connections oltre il valore predefinito. L'istanza potrebbe riscontrare problemi quando più connessioni richiedono un maggiore utilizzo della memoria. Le istanze con memoria insufficiente potrebbero bloccarsi. Se aumenti il valore max_connections, monitora la metrica FreeableMemory di Amazon CloudWatch per monitorare l'utilizzo delle risorse.
Tuttavia, se le tue istanze hanno molta memoria libera, modifica manualmente il parametro max_connections. Prima di regolare max_connections, regola il limite di connessione nel gruppo di parametri per tenere conto delle modifiche nella memoria disponibile nelle istanze database.
Se l'istanza database utilizza un gruppo di parametri predefinito, è necessario creare e utilizzare un gruppo di parametri personalizzato per modificare max_connections. Associa il gruppo di parametri DB personalizzato alla tua istanza Amazon RDS, quindi riavvia l'istanza. Dopo aver associato il nuovo gruppo di parametri personalizzati all'istanza database, puoi modificare il valore del parametro max_connections. Per ulteriori informazioni, consulta Come posso modificare i valori di un gruppo di parametri del database di Amazon RDS. Imposta max_connections su un valore leggermente superiore al numero massimo di connessioni che prevedi di aprire su ogni istanza database.
Nota: durante il riavvio, si verifica una breve interruzione.
Best practice di RDS per MySQL per aumentare max_connections
Se hai attivato lo schema delle prestazioni, è consigliabile utilizzare l'impostazione predefinita di max_connections. Le strutture di memoria dello schema delle prestazioni vengono dimensionate automaticamente in base alle variabili di configurazione del server.
Nota: se attivi Performance Insights per un'istanza database di Amazon RDS per MySQL, lo schema delle prestazioni viene attivato automaticamente.
Per il tuo caso d'uso, ottimizza le impostazioni di timeout per i seguenti parametri relativi alla connessione MySQL:
- wait_timeout
- interactive_timeout
- net_read_timeout
- net_write_timeout
- max_execution_time
- max_connect_errors
- max_user_connections
Per ulteriori informazioni su questi parametri, consulta 7.1.8 Server system variables sul sito web MySQL.
Best practice di RDS per PostgreSQL per aumentare max_connections
Per il tuo caso d'uso, ottimizza le impostazioni di timeout per i seguenti parametri relativi alla connessione PostgreSQL:
- idle_in_transaction_session_timeout
- tcp_keepalives_idle
- tcp_keepalives_interval
- tcp_keepalives_count
Per ulteriori informazioni su questi parametri, consulta idle_in_transaction_session_timeout (integer) e 19.3.2 TCP settings sul sito web PostgreSQL.
Video correlati
Contenuto pertinente
- AWS UFFICIALEAggiornata 3 anni fa
- AWS UFFICIALEAggiornata 3 anni fa
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata 4 mesi fa