O servidor RDS apresenta 40 conexões máximas, como na documentação a seguir
estou usando o Magento 1.9 e, em alguns pontos, chego ao número máximo e o site está fora de serviço.
Você tem alguma maneira recomendada de resolver esse problema?
Do meu entendimento, se eu tiver 2 servidores web conectados a um servidor RDS... então eu deveria ter 2 conexões RDS, não mais.
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 de RDS com limite max_connections:
Atualização 2017-07
A configuração atual de max_connections do RDS MySQL é padrão por
{DBInstanceClassMemory/12582880}
, se você usar t2.micro com 512 MB de RAM, max_connections pode ser (512*1024*1024)/12582880 ~= 40 e assim por diante.Cada servidor Web pode ter muitas conexões com o RDS, o que depende de suas solicitações SQL do servidor Web.
Você pode alterar o
max_connections
valor atualizando a política de parâmetros padrão ou criando uma nova - eu sugiro ir com o último.max_connections
valorEspero que isto ajude!
Informações reais para instâncias t3 do Postgresql (grupo de parâmetros padrão.postgres10):
É semelhante para default.postgres9 e default.postgres11
Faça login na sua instância do RDS (usando um cliente MySQL) e execute a seguinte consulta:
O número máximo de conexões de banco de dados simultâneas varia de acordo com o tipo de mecanismo de banco de dados e a alocação de memória para a classe de instância de banco de dados. O número máximo de conexões é definido no grupo de parâmetros associado à instância de banco de dados, exceto para Microsoft SQL Server, onde é definido nas propriedades do servidor para a instância de banco de dados no SQL Server Managment Studio (SSMS).
MariaDB/MySQL
{DBInstanceClassMemory/12582880}
Oráculo
LEAST({DBInstanceClassMemory/9868951}, 20000)
PostgreSQL
LEAST({DBInstanceClassMemory/9531392}, 5000)
servidor SQL
0 (unlimited)
https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Limits.html#RDS_Limits.MaxConnections
Embora aumentar as conexões máximas na configuração do servidor possa corrigir o problema, você deve considerar verificar as configurações e implementações de seu aplicativo.
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 do framework que estava usando criava uma conexão com cada chamada ao banco de dados.
Embora isso possa não causar problemas para alguns, no momento em que você tiver mais visitantes ou algumas tarefas que exigem muito do banco de dados e podem ser executadas em várias conexões, a melhor maneira de evitar que o servidor falhe com o erro "TOO MANY CONNECTIONS" é implementar um banco de dados pool de conexões.
Isso evita que o aplicativo crie mais conexões com as quais o servidor possa lidar e não cause o travamento do aplicativo para os usuários. Um pool de conexões manteria uma fila para as solicitações de acesso ao banco de dados até que uma conexão se tornasse disponível para que pudesse prosseguir com o processamento da solicitação dos usuários.
Apenas tenha em mente que o pool de conexões deve ser thread-safe em um cenário multi-thread.
Não são 40 conexões no máximo, são 40 instâncias RDS no máximo. Você provavelmente está usando apenas 1 instância com base em sua descrição.
Você pode ter milhares de conexões com o servidor RDS porque 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 procurar aumentar a instância do RDS.
Parece ~ 45 conexões / 2 GB de Ram
Eu vi fórmulas, verifiquei minha configuração e ela tem uma fórmula muito mais complicada para max_connections por padrão e estava tendo dificuldade em contar o que é limite real, então fiz de maneira simples - acabei de testar. O painel de monitoramento mostra a linha vermelha ao chegar perto do limite. Confira abaixo.
db.t3.small
(2 gb ram) Gráfico do console de monitoramento, como você pode ver, mostra conexões máximas ± 46, aquele pico que cruzou a linha vermelha por um momento é 47Atualizando agora para uma instância 2x maior
db.t3.medium
(4 gb de ram), eu esperava obter 45 extras para cada 2 gb de ram e parece que é verdade. A linha vermelha pode ser visível aproximando-se de ~90 conexões com caixa de 4gb: