Límites de conexión de AWS RDS

45

El servidor RDS tiene un máximo de 40 conexiones, ya que en la siguiente documentación
estoy usando Magento 1.9, y en algunos puntos, alcanzo el número máximo y el sitio web está fuera de servicio.
¿Tiene alguna forma recomendada para resolver este problema?

Según tengo entendido, si tengo una conexión de 2 servidores web a un servidor RDS ... entonces debería tener 2 conexiones RDS, no más.

Alaa Badran
fuente
2
"Según tengo entendido, si tengo 2 servidores web conectados a un servidor RDS ... entonces debería tener 2 conexiones RDS, no más". Esa es una comprensión incorrecta. Por lo general, es 1 conexión por proceso de trabajo o subproceso.
Michael - sqlbot
Gracias @ Michael-sqlbot .. Sí, no entiendo esto, pero quería asegurarme. Pero, ¿por qué cuando tenemos 40 conexiones llegando a RDS, rechaza otra conexión y es inalcanzable hasta que se cierran otras conexiones?
Alaa Badran
Eso es por diseño, desde el max_connectionsparámetro. Para la mayoría de las cargas de trabajo, debería poder aumentarlo de manera segura, porque es un valor predeterminado conservador ... pero querrá investigar la causa de esos picos.
Michael - sqlbot

Respuestas:

65

La variable de límite de AWS RDS max_connections se basa en el tipo de instancia, por lo que puede actualizar su RDS o hacer más réplicas.

Los tipos RDS con límite de 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.grande 1258
  • m4.xlarge 1320
  • m2.xlarge 1412
  • m3.2xlarge 2492
  • r3.xlarge 2540

Referencia por max_connections en tamaños de instancia de MySQL de AWS RDS en 2015

Actualización 2017-07

La configuración actual de RDS MySQL max_ connections es predeterminada {DBInstanceClassMemory/12582880}, si usa t2.micro con 512 MB de RAM, max_ connections podría ser (512 * 1024 * 1024) / 12582880 ~ = 40, y así sucesivamente.


Cada servidor web podría tener muchas conexiones a RDS, lo que depende de sus solicitudes SQL del servidor web.

Nick Tsai
fuente
Lo sé, pero cuando alcanzo 40 conexiones, ¿el servidor no responde? Compruebe esto: drive.google.com/file/d/0B-_uggt0MBYOZElEMEItWDIwUEk/…
Alaa Badran
1
Compruebo los grupos de parámetros RDS, el valor de {DBInstanceClassMemory/12582880}max_ connections es el predeterminado , por lo que cuando usa t2.micro con 512 MB de RAM, el max_ connections podría ser lo (512*1024*1024)/12582880 = 40.69que podría explicar sus 40 conexiones máximas.
Nick Tsai
2
Puede verificar el valor consultando ese RDS MySQL con el comando show variables like 'max_connections';.
Nick Tsai
1
Puede crear uno nuevo parameter groupy cambiar el valor de max_connections al valor que desee. Este será el nuevo límite de conexión para su instancia de RDS.
barra invertidaN
1
Esta respuesta se mantiene en 2019. Siempre puede comprobarlo haciendoSHOW VARIABLES WHERE Variable_name='max_connections'
Dave Stein,
30

Puede cambiar el max_connectionsvalor actualizando la política de parámetros predeterminada o creando una nueva; sugeriría ir con la última.

  • Ir a RDS
  • Grupos de parámetros
  • Crear un nuevo grupo de parámetros (AWS dejará todo como predeterminado)
  • buscar el max_connectionsvalor
  • Cambiar el valor a usar
  • Ir a la instancia de RDS y modificar
  • Seleccione el nuevo grupo de parámetros creado y reinicie la instancia o deje que AWS lo reinicie durante la próxima ventana de mantenimiento

¡Espero que esto ayude!

David
fuente
2
<3 esta debería ser la respuesta aceptada
bbozo
2
a pesar de que configuré max_ connections a 1000, rds solo permitió 100 conexiones máximas en una micro instancia
Miguel Mota
1

Si bien aumentar las conexiones máximas en la configuración del servidor puede solucionar el problema, debe considerar verificar las configuraciones e implementaciones de su aplicación.

No soy un experto en Magento, pero como recientemente tuve un problema similar en un proyecto en el que estaba trabajando, noté que la implementación predeterminada del marco que estaba usando creaba una conexión con cada llamada a la base de datos.

Si bien eso puede no causar ningún problema a algunos, en el momento en que tiene más visitantes o algunas tareas que requieren una gran cantidad de bases de datos y pueden ejecutarse en múltiples conexiones, la mejor manera de evitar que el servidor se bloquee con el error "DEMASIADAS CONEXIONES" es implementar una base de datos Piscina de conexión.

Esto evita que la aplicación cree más conexiones que el servidor pueda manejar y no bloquee la aplicación para los usuarios. Un grupo de conexiones mantendría una cola para las solicitudes de acceso a la base de datos hasta que una conexión esté disponible para que pueda continuar con el procesamiento de la solicitud de los usuarios.

Solo tenga en cuenta que el grupo de conexiones debe ser seguro para subprocesos en un escenario de subprocesos múltiples.

Uriel Bertoche
fuente
1

Inicie sesión en su instancia de RDS (utilizando un cliente MySQL) y ejecute la siguiente consulta:

SHOW VARIABLES LIKE 'max_connections';
Shammi Shailaj
fuente
1

Información real para instancias t3 de Postgresql (grupo de parámetros default.postgres10):

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

Es similar para default.postgres9 y default.postgres11

anton.uspehov
fuente
0

No son 40 conexiones como máximo, son 40 instancias RDS como máximo. Lo más probable es que solo use 1 instancia según su descripción.

Puede tener miles de conexiones con el servidor RDS porque cada vez que se abre una sesión con la base de datos, se crea una nueva conexión. Probablemente se encuentre con limitaciones de rendimiento y debería considerar aumentar la instancia de RDS.

jason m
fuente
Gracias @jason, tengo la siguiente información: cuando alcanzo la conexión 40, RDS no responde hasta que se cierran otras conexiones. Tenemos r3.xlarge RDS instancia. Aquí hay una captura de pantalla de esto: drive.google.com/file/d/0B-_uggt0MBYOZElEMEItWDIwUEk/... Tenemos CPU inactiva con un gran número de conexiones
Alaa Badran
Esto es conexiones, no otra cosa
Orlando