Compreender o gerenciamento de conexões
O Postgres usa um modelo de conexão baseado em processo. Estabelecer uma conexão envolve o sistema operacional e a alocação de uma pequena quantidade de memória. Cada consulta SQL é executada usando uma conexão atual.
Estados de conexão
Uma conexão pode estar em um dos quatro estados:
- ativa – conexões ativas que no momento estão executando consultas.
- ociosa – conexões abertas que não estão sendo usadas.
- ociosa na transação – uma conexão que está aguardando, não fazendo nenhum trabalho. Use pg_stat_activity para entender o que uma conexão está fazendo e por quanto tempo ela está nesse estado.
- ociosa na transação (anulada) – conexões que antes estavam ociosas na transação, mas que agora foram abortadas.
O modelo de conexão baseado em processo torna caro manter muitas conexões ociosas.
Máximo de conexões
O PostgreSQL limita o número máximo de conexões simultâneas ao servidor a qualquer momento usando um parâmetro de servidor chamado max_connections. No Banco de Dados do Azure para PostgreSQL, o padrão depende da camada de computação. O valor permitido está entre 25 e 5000.
Uma implementação local do PostgreSQL reserva algumas conexões para o superusuário manter a integridade do banco de dados. Essa reserva normalmente seria de 15% do valor max_connections.
O Banco de Dados do Azure para PostgreSQL é uma solução gerenciada e reserva automaticamente três conexões para monitorar um servidor flexível.
Nota
Não há nenhum parâmetro de servidor para gerenciar superuser_reserved_connections no Banco de Dados do Azure para PostgreSQL.
Pool de conexões
Os aplicativos cliente que frequentemente abrem e fecham conexões podem experimentar latência de conexão, resultando em transações menores por segundo e latência geral maior do aplicativo.
O Banco de Dados do Azure para PostgreSQL recomenda o pool de conexões em vez de abrir e fechar conexões com frequência. O agrupamento de conexões reutiliza conexões existentes, em vez de fechar e recriar conexões. Esse processo reduz a latência de conexão e permite transações de banco de dados mais altas por segundo para bancos de dados no servidor.
O pool de conexões estabelece um conjunto fixo de conexões quando o servidor é iniciado e essas conexões são mantidas. O pool de conexões também ajuda a reduzir a fragmentação de memória causada por novas conexões constantemente sendo criadas no servidor.
PGBouncer é uma solução de pooling de conexões integrada ao Banco de Dados do Azure para PostgreSQL. Para habilitar pgBouncer:
- No portal do Azure, navegue até o servidor do Banco de Dados do Azure para PostgreSQL.
- No menu à esquerda, selecione Parâmetros do Servidor.
- Na barra de pesquisa, procure por PgBouncer.
- Defina a configuração pgbouncer.enabled como true para habilitar o PgBouncer. Essa configuração não requer uma reinicialização do servidor.
- Defina pgbouncer.default_pool_size com o número de conexões por par de usuário/banco de dados necessário. O padrão é 50.
- Defina o parâmetro pgBouncer.pool_mode como TRANSACTION.
Nota
O PgBouncer tem suporte em camadas de computação com Uso Geral e Otimizado para Memória em acesso público e rede de acesso privado. Não há suporte para PgBouncer na camada de computação Burstable. Quando a camada de computação é alterada de Uso Geral ou Otimizado para Memória para Com Capacidade de Intermitência, a funcionalidade PGBouncer é perdida.