Por que recebo o erro “Muitas conexões” quando me conecto à minha instância do Amazon Aurora MySQL?

5 minuto de leitura
0

Estou tentando me conectar à minha instância de banco de dados edição compatível com Amazon Aurora MySQL, mas recebo o erro “Muitas conexões”. Quero saber o valor máximo de conexão para minha instância de banco de dados e como posso alterá-lo.

Breve descrição

Você recebe o erro Muitas conexões quando todas as conexões disponíveis estão sendo usadas por outros clientes. O parâmetro max_connections define o número total de conexões em sua instância de banco de dados.

Para resolver esse problema, primeiro visualize todos os threads em execução na sua instância de banco de dados. Em seguida, ative o registro em sua instância de banco de dados. Por fim, revise as conexões existentes e encerre as conexões desnecessárias para reduzir a pressão da conexão.

Por exemplo, é uma prática recomendada encerrar as conexões em um estado de hibernação. Ou aumentar o número máximo de conexões com sua instância de banco de dados.

Resolução

Mostrar threads em execução na sua instância de banco de dados

Primeiro, veja todas as consultas em execução na sua instância de banco de dados.

Em seguida, verifique o valor dos threads_connected. O parâmetro threads_connected exibe o número de conexões que estão abertas. Para obter mais informações, consulte Threads_connected no site do MySQL. Execute o seguinte comando:

  • MySQL 5.7

    mysql> SELECT variable_value AS Threads_Connected FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE variable_name='threads_connected';
  • MySQL 8.0

    mysql> SELECT variable_value AS Threads_Connected from performance_schema.global_status where VARIABLE_NAME = 'threads_connected';

Observação: como o Aurora pode ter conexões com o banco de dados do usuário administrativo (rdsadmin), é possível ver um valor maior para threads_connected do que max_connections.

É uma prática recomendada usar threads_connected ou information_schema.processlist em vez de DatabaseConnections. Esses parâmetros mostram com precisão as conexões MySQL disponíveis em uso por outros clientes. O DatabaseConnections mostra o total de conexões TCP remotas, mas não leva em conta as conexões inativas ou as sessões que o mecanismo de banco de dados cria para seus próprios fins. Como resultado, o valor do DatabaseConnections pode ser menor do que o número de operações executadas pelos threads do MySQL.

Ative o registro em sua instância de banco de dados

Para identificar a causa raiz do aumento do problema de conexões, ative o registro em sua instância de banco de dados compatível com o Aurora MySQL.
Ative general_log, slow_query_log ou os Parâmetros avançados de log de auditoria.

Encerre as conexões existentes na sua instância de banco de dados

Encerre as sessões ou consultas do usuário em execução na sua instância de banco de dados.

Aumente o máximo de conexões com sua instância de banco de dados

Para aumentar o número máximo de conexões com sua instância de banco de dados, use os seguintes métodos.

Aumente o parâmetro max_connections

Use um grupo de parâmetros de instância de banco de dados personalizado para definir um valor maior para o parâmetro max_connections. Esse método não causa uma interrupção. No entanto, se sua instância de banco de dados usa um grupo de parâmetros padrão, você deve alterar o grupo de parâmetros para um grupo de parâmetros personalizado. Essa ação causa uma interrupção.

Exemplo de parâmetro max_connection:

max_connections = GREATEST({log(DBInstanceClassMemory/805306368)*45},{log(DBInstanceClassMemory/8187281408)*1000})

Verifique o valor atual do parâmetro max_connections para sua instância de banco de dados. Para fazer isso, verifique o grupo de parâmetros anexado à sua instância de banco de dados ou execute a seguinte consulta:

select @@max_connections;

É possível definir max_connections no cluster de banco de dados e no grupo de parâmetros da instância de banco de dados. No entanto, a configuração do parâmetro da instância de banco de dados tem precedência sobre a configuração do parâmetro do cluster de banco de dados. O parâmetro max_connections é dinâmico, então você não precisa reinicializar a instância depois de alterar o valor do parâmetro.

Para obter mais informações sobre max_connections para cada classe de instância de banco de dados e outros requisitos, consulte Máximo de conexões com uma instância de banco de dados Aurora MySQL.

Observação: as instâncias de banco de dados do Aurora MySQL e do Amazon Relational Database Service (Amazon RDS) para MySQL têm quantidades diferentes de sobrecarga de memória. O valor max_connections pode ser diferente para instâncias de banco de dados do Aurora MySQL e do Amazon RDS para MySQL que usam a mesma classe de instância.

Para ver as práticas recomendadas de max_connections, consulte Como faço para aumentar o máximo de conexões da minha instância do Amazon RDS para MySQL ou do Amazon RDS para PostgreSQL?

Aumente a escala de sua instância verticalmente

Se você exceder o valor máximo de max_connections, aumente a escala da instância verticalmente até uma classe de instância de banco de dados com mais memória.

Observação: sua instância de banco de dados sofre uma interrupção quando está sendo ampliada.

Usar o Amazon RDS Proxy

Para melhorar a capacidade de escalabilidade de sua aplicação, use o Amazon RDS Proxy para Aurora.

AWS OFICIAL
AWS OFICIALAtualizada há 6 meses