Por que recebo um erro "Muitas conexões" ao me conectar à minha instância do Amazon Aurora MySQL?

8 minuto de leitura
0

Estou tentando me conectar à minha instância de banco de dados Amazon Aurora MySQL e estou recebendo o erro "Muitas conexões". Qual é o valor máximo de conexão para minha instância de banco de dados e como é possível ajustar esse valor?

Breve descrição

Se o cliente encontrar um erro "Muitas conexões" ao tentar se conectar a um cluster ou instância de banco de dados Amazon Aurora MySQL, isso significa que todas as conexões disponíveis estão sendo usadas por outros clientes. Isso é definido pelo parâmetro max_connections.

Você pode ver qualquer um dos seguintes sintomas:

  • A métrica DatabaseConnections no Amazon CloudWatch é próxima ou igual ao valor max_connections para sua instância de banco de dados do Aurora MySQL.
  • O valor do parâmetro max_connections é maior do que a memória disponível provisionada pela classe da instância de banco de dados para conexões. Verifique sinais como um valor baixo da métrica FreeableMemory no CloudWatch.
  • Você recebe um erro ERROR 1040(): Muitas conexões no log do MySQL.

Você pode atingir um valor max_connections pelos seguintes motivos:

  • Aumento repentino ou gradual no número de conexões cliente/aplicação com a instância de banco de dados. As causas são as seguintes:
    • Aumento na workload levando ao aumento das conexões.
    • Bloqueio em nível de tabela/linha que leva a um aumento na conexão cliente/aplicação.
  • O cliente/aplicação não fecha as conexões corretamente após o término da operação.
  • Valor mais alto para parâmetros de tempo limite de conexão, como wait_timeout e/ou interactive_timeout que podem levar a um aumento nas conexões inativas.

Antes de resolver o erro máximo de conexão, primeiro veja todos os threads que estão em execução na sua instância de banco de dados. Em seguida, ative o registro em sua instância de banco de dados.

Mostrar tópicos atualmente em execução na instância de banco de dados do Aurora MySQL

O comando SHOW FULL PROCESSLIST mostra quais threads estão sendo executados atualmente na sua instância de banco de dados. Faça login na sua instância de banco de dados e execute a seguinte consulta:

SHOW FULL PROCESSLIST\G

Você também pode executar a consulta a seguir para obter o mesmo conjunto de resultados:

SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST

**Observação:**Você deve conceder à sua conta de usuário o privilégio de administração do servidor MySQL PROCESS para ver todos os threads em execução em uma instância de banco de dados MySQL. Caso contrário, SHOW PROCESSLIST exibe somente os threads associados à conta do MySQL usada. Para obter mais informações, consulte a documentação do MySQL sobre Privilégios fornecidos pelo MySQL.

Observação: As instruções SHOW FULL PROCESSLIST e INFORMATION_SCHEMA.PROCESSLIST podem afetar negativamente o desempenho porque exigem uma exclusão mútua.

Habilite o registro na instância de banco de dados do Aurora MySQL

Habilite o registro em sua instância de banco de dados do Aurora MySQL ativando general_log, slow_query_log ou parâmetros de log de auditoria avançados.

Resolução

Resolva o erro máximo de conexão usando um dos seguintes métodos:

  • Revise as conexões existentes e, se possível, encerre-as para liberar a pressão da conexão. Por exemplo, comece encerrando as conexões no estado de hibernação.
  • Aumente o número máximo de conexões com sua instância de banco de dados.

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

Encerre as sessões ou consultas do usuário atualmente em execução na sua instância de banco de dados executando os comandos rds_kill e rds_kill_query:

CALL mysql.rds_kill(thread-ID);
CALL mysql.rds_kill_query(thread-ID);

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

Aumente o número máximo de conexões com sua instância de banco de dados usando os seguintes métodos:

Observação: O número máximo de conexões permitidas a uma instância de banco de dados do Aurora MySQL é determinado pelo parâmetro max_connections no grupo de parâmetros em nível de instância da instância de banco de dados. Veja o exemplo a seguir:

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;

O parâmetro max_connections tem as seguintes especificações:

  • Pode ser definido no cluster de banco de dados e no grupo de parâmetros da instância de banco de dados. No entanto, a configuração de parâmetros em nível de instância entra em vigor.
  • O valor permitido é um número inteiro no intervalo de 1 a 16000.
  • De natureza dinâmica (nenhuma reinicialização é necessária para alterar esse valor de parâmetro).

Para obter mais informações sobre o valor padrão de max_connections para cada classe de instância de banco de dados disponível para o Aurora MySQL, consulte Máximo de conexões com uma instância de banco de dados do Aurora MySQL.

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

Práticas recomendadas para ajustar o parâmetro max_connections

Certifique-se de considerar o seguinte ao trabalhar com o parâmetro max_connections para sua instância de banco de dados.

  • Os limites de conexão padrão são ajustados para sistemas que usam os valores padrão para outros grandes consumidores de memória, como o pool de buffers e o cache de consulta. Se você alterar essas configurações para seu cluster de banco de dados, considere ajustar o limite de conexão para considerar o aumento ou a diminuição da memória disponível nas instâncias de banco de dados.
  • Defina um max_connections um pouco acima do número máximo de conexões que você espera abrir em cada instância de banco de dados.
  • Se também habilitou o performance_schema, cuidado com a configuração do parâmetro max_connections. As estruturas de memória do Performance Schema são dimensionadas automaticamente com base nas variáveis de configuração do servidor, incluindo o max_connections. Quanto mais alto você definir a variável, mais memória o Performance Schema usa. Em casos extremos, isso pode causar problemas de falta de memória em tipos de instâncias menores, como T2 e T3. É uma prática recomendada deixar o max_connections no valor padrão se estiver usando o Performance Schema. Se planeja aumentar o max_connections para um valor significativamente maior do que o valor padrão, considere desabilitar o Performance Schema. **Observação:**Se habilitar o Performance Insights para uma instância de banco de dados do Aurora MySQL, isso ativará automaticamente o Performance Schema.

Você também pode considerar os seguintes parâmetros de conexão do MySQL para ajuste:

  • wait_timeout: Número de segundos em que o servidor espera pela atividade em uma conexão de arquivo TCP/IP ou UNIX não interativa antes de fechá-la.
  • interactive_timeout: Número de segundos em que o servidor espera pela atividade em uma conexão interativa antes de fechá-la.
  • net_read_timeout: Número de segundos para esperar por mais dados de uma conexão TCP/IP antes de interromper a leitura.
  • net_write_timeout: Número de segundos para esperar nas conexões TCP/IP até que um bloco seja gravado antes de descartar a gravação.
  • max_execution_time: Tempo limite de execução para instruções SELECT, em milissegundos.
  • **max_connect_errors:**Um host é bloqueado de outras conexões se houver mais do que esse número de conexões interrompidas.
  • max_user_connections: Número máximo de conexões simultâneas permitidas para qualquer conta do MySQL.

**Observação:**Este artigo não inclui valores recomendados ou personalizados para esses parâmetros, pois esses valores variam de acordo com o caso de uso individual.


Informações relacionadas

Máximo de conexões com uma instância de banco de dados do Aurora MySQL

Como faço para verificar a execução de consultas para minha instância de banco de dados MySQL do Amazon RDS?

Encerrando uma sessão ou consulta

AWS OFICIAL
AWS OFICIALAtualizada há 3 anos