Como faço para aumentar o máximo de conexões da minha instância Amazon RDS para MySQL ou Amazon RDS para PostgreSQL?

6 minuto de leitura
0

Desejo aumentar o máximo de conexões para minha instância de banco de dados Amazon Relational Database Service (Amazon RDS) para MySQL ou Amazon RDS para PostgreSQL.

Resolução

Observação: antes de aumentar o número máximo de conexões, é uma prática recomendada otimizar suas configurações existentes.

Verifique o valor atual de max_connections

A métrica max_connections define o número máximo de conexões de banco de dados para RDS para MySQL e RDS para PostgreSQL. O valor padrão de max_connections depende da classe de instância que a instância do Amazon RDS usa. Uma classe de instância de banco de dados com mais memória disponível pode ter um número maior de conexões de banco de dados.

Para verificar o valor max_connections, conecte-se à instância de banco de dados Amazon RDS para seu mecanismo de banco de dados e execute o seguinte comando.

  • RDS para MySQL:

    SHOW GLOBAL VARIABLES LIKE 'max_connections';
  • RDS para PostgreSQL:

    postgres=> show max_connections;

Observação: o número padrão de max_connections que você calcula com uma fórmula pode variar um pouco da saída dos comandos anteriores. Essa variação ocorre porque o Amazon RDS reserva alguma memória do total de DBInstanceClassMemory para operações subjacentes do sistema operacional. Os comandos anteriores usam somente a memória reservada para o mecanismo PostgreSQL e não para o sistema operacional host subjacente.

Otimize suas conexões existentes

Antes de aumentar o valor de max_connections, verifique se é possível reduzir o número de conexões existentes. Quando o número de conexões do cliente excede o valor max_connections, você recebe um dos seguintes erros:

Esses erros podem ocorrer quando o Amazon RDS tem um workload aumentado ou tem bloqueio em nível de tabela ou linha. Se o workload na sua instância funcionar conforme o esperado, você deverá aumentar o parâmetro max_connections.

Verifique se você fechou todas as conexões do cliente e da aplicação após o término de uma operação

Quando uma conexão com o servidor não está fechada, a aplicação 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 max_connections.

Para listar todas as conexões da sua instância de banco de dados RDS para MySQL, execute o seguinte comando:

SHOW FULL PROCESSLIST;

Para visualizar as conexões de cada banco de dados para sua instância do RDS para PostgreSQL, execute o seguinte comando:

SELECT datname, numbackends FROM pg_stat_database;

(Somente MySQL) Verifique se há conexões inativas

Conexões abertas inativas ocorrem quando você define valores mais altos para parâmetros de tempo limite de conexão, como wait_timeout ou interactive_timeout. Se você configurar uma alta cota de conexão, o uso de memória poderá ser alto mesmo se você não estiver usando essas conexões.

Para visualizar as conexões ociosas em uma instância do RDS para MySQL, execute a seguinte consulta:

SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST WHERE COMMAND='Sleep';

Para encerrar uma conexão inativa em uma instância de banco de dados RDS para MySQL, execute o seguinte comando:

CALL mysql.rds_kill(example-pid);

(Somente PostgreSQL) Verifique se há conexões inativas

Para visualizar as conexões ociosas em uma instância do RDS para PostgreSQL, execute a seguinte consulta:

    SELECT * FROM pg_stat_activity WHERE pid <> pg_backend_pid()
    AND state in ('idle', 'idle in transaction', 'idle in transaction (aborted)', 'disabled')
    AND state_change < current_timestamp - INTERVAL '15' MINUTE;

A saída da consulta mostra processos de back-end que estão ociosos, ociosos na transação, ociosos na transação (abortados) ou desativados por mais de 15 minutos.

Para encerrar uma conexão ociosa em uma instância do RDS para PostgreSQL, execute o seguinte comando:

SELECT pg_terminate_backend(example-pid);

Observação: é uma prática recomendada configurar somente as conexões ativas necessárias para o desempenho da aplicação. Se a estrutura do sua aplicação exigir conexões ociosas, é uma prática recomendada usar o Amazon RDS Proxy.

Aumentar o número máximo de conexões

Observação: quando aumente a escala de uma instância verticalmente, você passa por um tempo de inatividade e muda a forma como você é cobrado.

Para aumentar o máximo de conexões, é uma prática recomendada aumentar verticalmente a escala de sua instância de banco de dados para uma classe de instância de banco de dados com mais memória. Não é uma prática recomendada aumentar o parâmetro max_connections além do valor padrão. A instância pode encontrar problemas quando mais conexões exigirem maior uso de memória. Instâncias com pouca memória podem falhar. Se você aumentar o valor max_connections, monitore a métrica FreeableMemory Amazon CloudWatch para monitorar seu uso de recursos.

No entanto, se suas instâncias tiverem muita memória livre, altere manualmente o parâmetro max_connections. Antes de ajustar max_connections, ajuste o limite de conexão no grupo de parâmetros para considerar as mudanças na memória disponível nas instâncias de banco de dados.

Se sua instância de banco de dados usa um grupo de parâmetros padrão, você deve criar e usar um grupo de parâmetros personalizado para modificar max_connections. Associe o grupo de parâmetros de banco de dados personalizado à sua instância do Amazon RDS e reinicialize a instância. Depois que o novo grupo de parâmetros personalizados for associado à sua instância de banco de dados, será possível modificar o valor do parâmetro max_connections. Para obter mais informações, consulte Como modifico os valores de um grupo de parâmetros de banco de dados do Amazon RDS. Defina o valor 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.

Observação: durante a reinicialização, você experimenta uma breve interrupção.

Práticas recomendadas do RDS para MySQL para aumentar o max_connections

Se você ativou o Esquema de desempenho, é uma prática recomendada usar a configuração padrão max_connections. As estruturas de memória do Esquema de desempenho são dimensionadas automaticamente com base nas variáveis de configuração do servidor.

Observação: se você ativar os Insights de desempenho para uma instância de banco de dados Amazon RDS para MySQL, o Esquema de desempenho será ativado automaticamente.

Para seu caso de uso, otimize as configurações de tempo limite para os seguintes parâmetros relacionados à conexão com o MySQL:

  • wait_timeout
  • interactive_timeout
  • net_read_timeout
  • net_write_timeout
  • max_execution_time
  • max_connect_errors
  • max_user_connections

Para obter mais informações sobre esses parâmetros, consulte 7.1.8 Variáveis do sistema do servidor no site do MySQL.

Práticas recomendadas do RDS para PostgreSQL para aumentar o max_connections

Para seu caso de uso, otimize as configurações de tempo limite para os seguintes parâmetros relacionados à conexão do PostgreSQL:

  • idle_in_transaction_session_timeout
  • tcp_keepalives_idle
  • tcp_keepalives_interval
  • tcp_keepalives_count

Para obter mais informações sobre esses parâmetros, consulte idle_in_transaction_session_timeout (inteiro) e as configurações TCP 19.3.2 no site do PostgreSQL.