Limites de conexão do AWS RDS

45

O servidor RDS vem com 40 conexões no máximo, como na documentação a seguir,
estou usando o Magento 1.9 e, em alguns momentos, chego ao número máximo e o site está fora de serviço.
Você tem alguma maneira recomendada de resolver esse problema?

Pelo que entendi, se eu tenho 2 servidores de conexão com um servidor RDS .. então eu deveria ter 2 conexões RDS, não mais.

Alaa Badran
fonte
2
"Pelo que entendi, se eu tiver 2 servidores de conexão com um servidor RDS .. então eu deveria ter 2 conexões RDS, não mais." Essa é uma compreensão incorreta. Normalmente, é uma conexão por processo ou thread de trabalho.
Michael - sqlbot
Obrigado @ Michael-sqlbot .. Sim, eu entendi errado, mas eu queria ter certeza. Mas, por que, quando temos 40 conexões chegando ao RDS, elas recusam outras conexões e ficam inacessíveis até que outras conexões sejam fechadas?
Alaa Badran
Isso é por design, a partir do max_connectionsparâmetro Para a maioria das cargas de trabalho, você deve aumentá-lo com segurança, porque é um valor padrão conservador e seguro ... mas você deseja investigar a causa desses picos.
Michael - sqlbot

Respostas:

65

A variável de limite max_connections do AWS RDS é baseada no tipo de instância, para que você possa atualizar seu RDS ou fazer mais réplicas.

Os tipos RDS com 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

Referência por max_connections nos tamanhos de instância do MySQL da AWS RDS em 2015

Atualização 2017-07

A configuração atual max_connections do MySQL do RDS é padrão por {DBInstanceClassMemory/12582880}, se você usar t2.micro com 512 MB de RAM, as max_connections podem ser (512 * 1024 * 1024) / 12582880 ~ = 40 e assim por diante.


Cada servidor da Web pode ter muitas conexões com o RDS, o que depende de suas solicitações SQL do servidor da Web.

Nick Tsai
fonte
Eu sei disso, mas quando, ao atingir 40 conexões, o servidor não responde? Verifique isso: drive.google.com/file/d/0B-_uggt0MBYOZElEMEItWDIwUEk/…
Alaa Badran
1
{DBInstanceClassMemory/12582880}Verifico os grupos de parâmetros do RDS, o max_connections é o padrão , portanto, quando você usa t2.micro com 512 MB de RAM, o max_connections pode ser o (512*1024*1024)/12582880 = 40.69que poderia explicar suas 40 conexões máximas.
Nick Tsai
2
Você pode verificar o valor consultando que RDS MySQL com o comando show variables like 'max_connections';.
Nick Tsai
1
Você pode criar um novo parameter groupe alterar o valor max_connections para o valor desejado. Este será o novo limite de conexão para sua instância do RDS.
backslashN
1
Esta resposta é válida em 2019. Você sempre pode verificar a si mesmo fazendoSHOW VARIABLES WHERE Variable_name='max_connections'
Dave Stein
30

Você pode alterar o max_connectionsvalor atualizando a política de parâmetros padrão ou criar uma nova - eu sugiro ir com a última.

  • Vá para o RDS
  • Grupos de Parâmetros
  • Crie um novo grupo de parâmetros (a AWS deixará tudo como padrão)
  • procure o max_connectionsvalor
  • Mude o valor a ser usado
  • Vá para a instância do RDS e modifique
  • Selecione o novo grupo de parâmetros criado e reinicie a instância ou deixe a AWS reiniciá-la durante a próxima janela de manutenção

Espero que isto ajude!

David
fonte
2
<3 esta deve ser a resposta aceita
bbozo
2
apesar de configurar max_connections a 1000, RDS ainda só permitiu 100 conexões max sobre um micro exemplo
Miguel Mota
1

Embora aumentar o número máximo de conexões na configuração do servidor possa resolver o problema, considere verificar as configurações e implementações de aplicativos.

Não sou especialista em Magento, mas como recentemente tive um problema semelhante em um projeto em que estava trabalhando, notei que a implementação padrão da estrutura que estava usando criava uma conexão com todas as chamadas ao banco de dados.

Embora isso possa não causar problemas a alguns, no momento em que você tem mais visitantes ou algumas tarefas que usam intensamente o banco de dados e podem ser executadas em várias conexões, a melhor maneira de evitar que o servidor trava com o erro "MUITAS CONEXÕES" é implementar um banco de dados pool de conexão.

Isso impede que o aplicativo crie mais conexões que o servidor possa manipular e não troque o aplicativo com os usuários. Um conjunto de conexões manteria uma fila para as solicitações de acesso ao banco de dados até que uma conexão se torne disponível, para que possa prosseguir com o processamento da solicitação dos usuários.

Lembre-se de que o pool de conexões deve ser seguro para threads em um cenário de vários threads.

Uriel Bertoche
fonte
1

Entre na sua instância do RDS (usando um cliente MySQL) e execute a seguinte consulta:

SHOW VARIABLES LIKE 'max_connections';
Shammi Shailaj
fonte
1

Informações reais para instâncias Postgresql t3 (grupo de parâmetros 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

É semelhante para default.postgres9 e default.postgres11

anton.uspehov
fonte
0

Isso não tem no máximo 40 conexões, ou seja, 40 instâncias RDS no máximo. Você provavelmente está usando apenas uma instância com base em sua descrição.

Você pode ter milhares de conexões com o servidor RDS, pois cada vez que uma sessão é aberta com o banco de dados, isso cria uma nova conexão. Você provavelmente está enfrentando restrições de desempenho e deve aumentar a instância do RDS.

jason s
fonte
Thanks @jason Tenho as seguintes informações: Ao atingir a conexão 40, o RDS não responde até que outras conexões fechem. Temos a instância do RDS r3.xlarge. Aqui está uma imagem disso: drive.google.com/file/d/0B-_uggt0MBYOZElEMEItWDIwUEk/... Temos CPU ocioso com elevado número de conexões
Alaa Badran
Esta é conexões, não outra coisa
Orlando