Como aumento as conexões máximas de minha instância do Amazon RDS for MySQL?

Data da última atualização: 27/08/2021

Quero aumentar o máximo de conexões de minha instância do Amazon Relational Database Service (Amazon RDS) for MySQL. Como posso fazer isso e quais são algumas práticas recomendadas para usar o parâmetro max_connections?

Resolução

No Amazon RDS for MySQL, a métrica max_connections monitora o número máximo definido de conexões de clientes simultâneas (permitidas).

Por padrão, o parâmetro max_connections é baseado na seguinte fórmula no Amazon RDS for MySQL (calculado a partir do valor de DBInstanceClassMemory):

max_connections = DBInstanceClassMemory/12582880

O valor padrão de max_connections depende da classe de instância usada pela instância do Amazon RDS. Uma classe de instância de banco de dados com mais memória disponível também oferece suporte a um número maior de conexões de banco de dados.

Para verificar o valor atual de max_connections, execute o seguinte comando depois de se conectar à sua instância do Amazon RDS for MySQL:

SHOW GLOBAL VARIABLES LIKE 'max_connections';

Quando as conexões do cliente excederem o valor max_connections, você recebe um erro de “Muitas conexões”.

Os seguintes fatores podem fazer com que suas conexões de banco de dados excedam o valor de max_connections:

  • Aumentos no número de conexões cliente/aplicação com a instância de banco de dados, causados por um aumento na workload ou bloqueio em nível de tabela/linha.
  • Fechar incorretamente uma conexão cliente/aplicação após o término de uma operação. Quando uma conexão com o servidor não é fechada corretamente, a aplicação do cliente abre uma nova conexão. Com o tempo, essas novas conexões de servidor podem fazer com que sua instância exceda o valor de max_connections. Para listar todas as conexões ativas em sua instância de banco de dados MySQL, use o comando SHOW FULL PROCESSLIST.
  • Conexões em suspensão (também conhecidas como conexões abertas inativas) são causadas por parâmetros de tempo limite de conexão mais altos (como wait_timeout ou interactive_timeout). Se você configurar um limite de conexão muito alto, poderá acabar com um uso maior de memória, mesmo que essas conexões não sejam usadas. Como resultado, quando o servidor de aplicativos tenta abrir todas as conexões do cliente com o banco de dados, essas conexões podem ser recusadas. Para encerrar uma conexão em suspensão, use a operação mysql.rds_kill.
    Dica: é uma prática recomendada configurar apenas as conexões ativas necessárias para a performance do aplicativo. Você também pode considerar atualizar para uma classe de instância de banco de dados do Amazon RDS maior.

Aumentando o max_connections_parameter da sua instância do Amazon RDS for MySQL

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

  • Promova sua instância de banco de dados para uma classe de instância de banco de dados com mais memória.
    Aviso: o tempo de inatividade ocorre quando você modifica uma instância de banco de dados do Amazon RDS.
  • Defina um valor maior para o parâmetro max_connections usando um grupo de parâmetros de nível de instância personalizado. Aumentar o parâmetro max_connections não causa nenhuma interrupção.
  • Se sua instância de banco de dados estiver usando um grupo de parâmetros padrão, altere o grupo de parâmetros para um grupo de parâmetros personalizado. Certifique-se de associar o grupo de parâmetros de banco de dados personalizado à sua instância do Amazon RDS for MySQL e reinicializar a instância. Depois que o novo grupo de parâmetros personalizado for associado à sua instância de banco de dados, você poderá modificar o valor do parâmetro max_connections.
    Observação: alterar o grupo de parâmetros pode causar uma interrupção. Para obter mais informações, consulte Trabalhando com grupos de parâmetros de banco de dados.

Para criar um grupo de parâmetros personalizado e modificar o parâmetro max_connections, consulte Como faço para modificar os valores de um grupo de parâmetros de banco de dados do Amazon RDS?

Práticas recomendadas para configurar o parâmetro max_connections

Certifique-se de considerar as seguintes práticas recomendadas 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 grupo de buffer). É uma prática recomendada aumentar a escala na vertical da classe de instância em vez de alterar o valor da classe da instância. No entanto, se as instâncias tiverem muita memória livre, você poderá alterar esse parâmetro manualmente. Se você alterar essas configurações para sua Instância de banco de dados, considere ajustar o limite de conexão para compreender o aumento ou a diminuição da memória disponível nas instâncias de banco de dados.
  • Defina o valor max_connections um pouco maior do que o número máximo de conexões que você espera abrir em cada instância de banco de dados.
  • Se você também habilitou o Performance Schema, preste muita atenção à configuração de 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. Quanto mais alto você definir a variável, mais memória o Performance Schema usa. Em casos extremos, isso pode levar a problemas de falta de memória em tipos de instâncias menores, como T2 e T3. Se você estiver usando o Performance Schema, é uma prática recomendada deixar a configuração max_connections no valor padrão. Se você planeja aumentar significativamente o valor de max_connections (para mais alto que o valor padrão), considere desativar o Performance Schema.
    Observação: se você habilitar o Performance Insights para uma instância de banco de dados do Amazon RDS for MySQL, o Performance Schema também será habilitado automaticamente.
  • Ao ajustar o parâmetro max_connections, verifique também os seguintes parâmetros relacionados à conexão do MySQL:
    wait_timeout: número de segundos que o servidor espera pela atividade em uma conexão de arquivo não interativa TCP/IP ou Unix antes de fechá-la.
    interactive_timeout: número de segundos 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 descartar a leitura.
    net_write_timeout: número de segundos para esperar nas conexões TCP/IP para que um bloco seja escrito 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 MySQL.

Observação: este artigo não inclui valores recomendados para os parâmetros listados porque esses valores variam de acordo com seu caso de uso.


Este artigo ajudou?


Precisa de ajuda com faturamento ou suporte técnico?