Como faço para aumentar as conexões máximas da minha instância do Amazon RDS para MySQL ou do Amazon RDS para PostgreSQL?
Quero aumentar as conexões máximas para minha instância de banco de dados Amazon Relational Database Service (Amazon RDS) para MySQL ou Amazon RDS para PostgreSQL.
Resolução
Exibir o valor atual de max_connections
No Amazon RDS para MySQL, a métrica max_connections monitora o número máximo definido de conexões simultâneas (permitidas) de clientes.
Por padrão, o parâmetro max_connections é baseado na seguinte fórmula no Amazon RDS para MySQL (calculado a partir do valor de DBInstanceClassMemory):
max_connections = DBInstanceClassMemory/12582880
Para verificar o valor atual de max_connections, execute o seguinte comando depois de se conectar à sua instância do Amazon RDS para MySQL:
SHOW GLOBAL VARIABLES LIKE 'max_connections';
No Amazon RDS para PostgreSQL, a métrica max_connections monitora o número máximo definido de conexões simultâneas. Por padrão, o parâmetro max_connections é baseado na seguinte fórmula no Amazon RDS para PostgreSQL (calculado a partir do valor de DBInstanceClassMemory):
max_connections = LEAST({DBInstanceClassMemory/9531392}, 5000)
Para verificar o valor atual de max_connections, execute o seguinte comando depois de se conectar à sua instância do Amazon RDS para PostgreSQL:
postgres=> show max_connections;
O valor padrão de max_connections para RDS para MySQL e RDS para PostgreSQL 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 oferece suporte a um número maior de conexões de banco de dados.
Observe que o número padrão de max_connections calculado usando a fórmula pode variar ligeiramente do número de conexões padrão retornadas do comando anterior. Isso ocorre porque parte da memória do total DBInstanceClassMemory é reservada para as operações subjacentes do sistema operacional. O comando anterior considera apenas a memória reservada para o mecanismo PostgreSQL e não para o sistema operacional do host subjacente.
Revise os motivos para ter muitas conexões
Quando o número de conexões do cliente excede o valormax_connections, você obtém erros semelhantes aos seguintes:
- Erro “Too many connections” (Muitas conexões) para uma instância do RDS para MySQL
- Erro "FATAL: remaining connection slots are reserved for non replicate superuser connections" (FATAL: slots de conexão restantes são reservados para conexões de superusuário não replicadas) para uma instância do RDS para PostgreSQL
Os seguintes fatores podem fazer com que suas conexões de banco de dados excedam o valor de max_connections:
Aumento no número de conexões de clientes ou aplicativos com a instância de banco de dados: Isso é causado por um aumento em workload ou bloqueio no nível da tabela/linha.
Fechamento incorreto de uma conexão de cliente ou aplicativo após o término de uma operação: quando uma conexão com o servidor não é fechada corretamente, o aplicativo 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 para sua instância de banco de dados do 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;
Conexões inativas: conexões inativas, que também são conhecidas como conexões abertas inativas, acontecem quando você define valores mais altos para parâmetros de tempo limite de conexão, comowait_timeout ouinteractive_timeout no MySQL. 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 adormecida em uma instância de banco de dados do RDS para MySQL, execute o seguinte comando:
CALL mysql.rds_kill(example-pid);
Conexões ociosas: você pode visualizar as conexões ociosas em uma instância do RDS para PostgreSQL executando a seguinte consulta. Essa consulta exibe informações sobre processos de back-end com um dos seguintes estados por mais de 15 minutos: 'ocioso', 'ocioso na transação', 'ocioso na transação (abortado) 'e 'desabilitado'.
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;
Para encerrar uma conexão ociosa em uma instância do RDS para PostgreSQL, execute o seguinte comando:
SELECT pg_terminate_backend(example-pid)
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.
Aumentar o valor de max_connections
Você pode aumentar o número máximo de conexões com sua instância de banco de dados RDS para MySQL ou RDS para PostgresSQL usando os seguintes métodos:
- 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. Mesmo que você possa aumentar o valor demax_connections além do valor padrão, essa não é uma prática recomendada. Isso ocorre porque a instância pode ter problemas quando o workload aumenta e mais memória é necessária. Um aumento no número de conexões pode aumentar o uso da memória. Instâncias com pouca memória podem falhar. Isso é verdade especialmente para instâncias menores. Se você aumentar o valor max_connections, certifique-se de monitorar o uso de recursos. Além disso, não deixe de consultar seu DBA sobre o aumento. É uma prática recomendada manter o valor padrão ou aumentar a escala verticalmente para uma classe de instância maior quando forem necessárias mais conexões.
- 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. 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 personalizado for associado à sua instância de banco de dados, você poderá modificar o valor do parâmetro max_connections. Para obter mais informações, consulte How do I modify the values of an Amazon RDS DB parameter group? (Como modifico os valores de um grupo de parâmetros de banco de dados do Amazon RDS?)
Observação: alterar o grupo de parâmetros pode causar uma interrupção. Para obter mais informações, consulte Working with DB parameter groups (Trabalhar com grupos de parâmetros de banco de dados). - Dimensione sua instância de banco de dados para uma classe de instância de banco de dados com mais memória. Observe que o aumento de instâncias do RDS afeta o faturamento da conta. Para saber mais, consulte Faturamento de instâncias de banco de dados para o Amazon RDS.
Aviso: o tempo de inatividade ocorre quando você modifica uma instância de banco de dados do Amazon RDS.
Siga as práticas recomendadas para configurar o parâmetro max_connections
Considere 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 verticalmente 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, é possível alterar esse parâmetro manualmente. Antes de alterar as configurações da instância de banco de dados, considere ajustar o limite de conexão para levar em conta 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 acima do número máximo de conexões que você espera abrir em cada instância de banco de dados.
- Para uma instância do RDS para MySQL, se você ativou o Performance Schema, preste muita atenção à configuração do parâmetromax_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 usará. Em casos extremos, essa condição pode levar a problemas de falta de memória em tipos de instância 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 para MySQL, o Performance Schema também será habilitado automaticamente. - Para uma instância do RDS para MySQL, ao ajustar o parâmetromax_connections, verifique os seguintes parâmetros relacionados à conexão do MySQL:wait_timeout: número de segundos que o servidor aguarda pela atividade em uma conexão de arquivo TCP/IP ou Unix não interativa antes de fechar a conexão
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 atividade de leitura
net_write_timeout: número de segundos de espera em conexões TCP/IP para que um bloco seja gravado antes de descartar a atividade de gravação
max_execution_time: tempo limite de execução para instruções SELECT, em milissegundos
max_connect_errors: um host é bloqueado para outras conexões se houver mais do que este número de conexões interrompidas
max_user_connections: número máximo de conexões simultâneas permitidas para qualquer conta do MySQL - Para uma instância do RDS para PostgreSQL, ao ajustar o parâmetromax_connections, verifique também os seguintes parâmetros relacionados à conexão do PostgreSQL:
idle_in_transaction_session_timeout: encerra qualquer sessão com uma transação aberta que tenha permanecido ociosa por mais tempo que a duração especificada em milissegundos. Isso permite que todos os bloqueios mantidos por essa sessão sejam liberados e o slot de conexão seja reutilizado. Além disso, as tuplas visíveis somente para essa transação são aspiradas.
tcp_keepalives_idle: número de segundos de inatividade após o qual o sistema operacional envia a mensagem de manutenção de atividade TCP para o cliente
tcp_keepalives_interval: número de segundos após os quais uma mensagem de manutenção de atividade TCP que não é confirmada pelo cliente é transmitida novamente
tcp_keepalives_count: número de manutenções de atividade TCP que podem ser perdidas antes que a conexão do servidor com o cliente seja considerada inativa.
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.
Vídeos relacionados
Conteúdo relevante
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 2 anos