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. Porém, se as instâncias tiverem muita memória livre, é possível 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 o caso de uso.


Este artigo ajudou?


Precisa de ajuda com faturamento ou suporte técnico?