Limiti di connessione RDS AWS


45

Il server RDS ha un massimo di 40 connessioni, come nella seguente documentazione
sto usando Magento 1.9, e in alcuni punti raggiungo il numero massimo, quindi il sito Web è fuori servizio.
Hai qualche modo consigliato per risolvere questo problema?

Da quanto ho capito, se ho una connessione a 2 server Web a un server RDS .. allora dovrei avere 2 connessioni RDS, non di più.


2
"Da quanto ho capito, se ho 2 connessioni server Web a un server RDS .. allora dovrei avere 2 connessioni RDS, non di più." Questa è una comprensione errata. In genere si tratta di 1 connessione per processo o thread di lavoro.
Michael - sqlbot,

Grazie @ Michael-sqlbot .. Sì, ho frainteso questo, ma volevo esserne sicuro. Ma perché quando abbiamo 40 connessioni in arrivo su RDS rifiuta altre connessioni ed è irraggiungibile fino a quando non vengono chiuse altre connessioni?
Alaa Badran,

Questo è di progettazione, dal max_connectionsparametro. Per la maggior parte dei carichi di lavoro, dovresti essere in grado di aumentarlo in modo sicuro, perché è un valore predefinito sicuro e conservativo ... ma ti consigliamo di indagare sulla causa di tali picchi.
Michael - sqlbot,

Risposte:


65

La variabile limite max_connections RDS di AWS si basa sul tipo di istanza, quindi puoi aggiornare il tuo RDS o creare più repliche.

I tipi RDS con limite max_connections:

  • t2.micro 66
  • t2.small 150
  • m3.medium 296
  • t2.medium 312
  • m3.large 609
  • t2.large 648
  • m4.large 648
  • m3.xlarge 1237
  • r3.large 1258
  • m4.xlarge 1320
  • m2.xlarge 1412
  • m3.2xlarge 2492
  • r3.xlarge 2540

Riferito da max_connections alle dimensioni dell'istanza MySQL AWS RDS nel 2015

Aggiornamento 2017-07

L'impostazione corrente di max_connections RDS MySQL è predefinita {DBInstanceClassMemory/12582880}se, se si utilizza t2.micro con 512 MB di RAM, i max_connections potrebbero essere (512 * 1024 * 1024) / 12582880 ~ = 40 e così via.


Ogni server Web può avere molte connessioni a RDS, che dipende dalle richieste SQL dal server Web.


Lo so, ma quando raggiungono 40 connessioni, il server non risponde? Controlla questo: drive.google.com/file/d/0B-_uggt0MBYOZElEMEItWDIwUEk/…
Alaa Badran

1
Controllo i gruppi di parametri RDS, max_connections è predefinito da {DBInstanceClassMemory/12582880}, quindi quando si utilizza t2.micro con 512 MB di RAM, potrebbero essere i max_connections (512*1024*1024)/12582880 = 40.69che potrebbero spiegare le connessioni 40 max.
Nick Tsai,

2
È possibile verificare il valore eseguendo una query su quel MySQL RDS con comando show variables like 'max_connections';.
Nick Tsai,

1
È possibile crearne uno nuovo parameter groupe modificare il valore max_connections nel valore desiderato. Questo sarà il nuovo limite di connessione per l'istanza RDS.
backslashN

1
Questa risposta è valida nel 2019. Puoi sempre controllarti facendoSHOW VARIABLES WHERE Variable_name='max_connections'
Dave Stein il

30

È possibile modificare il max_connectionsvalore aggiornando la politica dei parametri predefinita o crearne una nuova. Suggerirei di andare con quest'ultima.

  • Vai a RDS
  • Gruppi di parametri
  • Crea un nuovo gruppo di parametri (AWS lascerà tutto come predefinito)
  • cerca il max_connectionsvalore
  • Modifica il valore da utilizzare
  • Vai all'istanza RDS e modifica
  • Seleziona il nuovo gruppo di parametri creato e riavvia l'istanza o lascia che AWS lo riavvii nella finestra di manutenzione successiva

Spero che sia di aiuto!


2
<3 questa dovrebbe essere la risposta accettata
bbozo

2
anche se ho impostato max_connections su 1000, rds ha comunque consentito solo 100 connessioni max su una microistanza
Miguel Mota,

1

Sebbene l'aumento delle connessioni massime sulla configurazione del server possa risolvere il problema, è necessario verificare la configurazione e le implementazioni dell'applicazione.

Non sono un esperto di Magento, ma dato che recentemente ho avuto un problema simile su un progetto su cui stavo lavorando, ho notato che l'implementazione predefinita del framework che stavo usando ha creato una connessione ad ogni chiamata al database.

Sebbene ciò non possa causare alcun problema ad alcuni, nel momento in cui hai più visitatori o alcune attività che richiedono un uso intensivo del database e possono essere eseguite su più connessioni, il modo migliore per impedire l'arresto anomalo del server con l'errore "TOO MANY CONNECTIONS" è implementare un database pool di connessioni.

Ciò impedisce all'applicazione di creare più connessioni gestibili dal server e di non arrestare in modo anomalo l'applicazione per gli utenti. Un pool di connessioni manterrebbe una coda per le richieste di accesso al database fino a quando non sarà disponibile una connessione in modo che possa procedere con l'elaborazione della richiesta degli utenti.

Basta tenere presente che il pool di connessioni dovrebbe essere thread-safe in uno scenario multi-thread.


1

Accedi alla tua istanza RDS (usando un client MySQL) ed esegui la seguente query:

SHOW VARIABLES LIKE 'max_connections';

1

Informazioni effettive per le istanze Postgresql t3 (gruppo di parametri default.postgres10):

  • db.t3.micro - 112 max_connections
  • db.t3.small - 225 max_connections
  • db.t3.medium - 450 max_connections
  • db.t3.large - 901 max_connections
  • db.t3.xlarge - 1802 max_connections
  • db.t3.2xlarge - 3604 max_connections

È simile per default.postgres9 e default.postgres11


0

Non sono max 40 connessioni, ovvero max 40 istanze RDS. Molto probabilmente stai usando solo 1 istanza in base alla tua descrizione.

È possibile disporre di migliaia di connessioni al server RDS perché ogni volta che viene aperta una sessione con il database, viene creata una nuova connessione. Probabilmente stai riscontrando vincoli di prestazioni e dovresti cercare di ingrandire l'istanza RDS.


Grazie @jason Ho le seguenti informazioni: Quando si raggiunge 40 connessioni, RDS non risponde fino alla chiusura di altre connessioni. Abbiamo un'istanza di R3.xlarge RDS. Ecco uno screenshot di questo: drive.google.com/file/d/0B-_uggt0MBYOZElEMEItWDIwUEk/… Abbiamo CPU inattiva con un alto numero di connessioni
Alaa Badran,

Queste sono connessioni, non altro
Orlando,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.