Compreender o tratamento da ligação
O Postgres usa um modelo de conexão baseado em processos. 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:
- ative - conexões ativas, que estão atualmente executando consultas.
- ocioso - conexões abertas que não estão em uso.
- ocioso na transação - uma conexão esperando, 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.
- ocioso na transação (abortado) - conexões que antes estavam ociosas na transação, mas agora são abortadas.
O modelo de conexão baseado em processo torna caro manter muitas conexões ociosas.
Número máximo de ligações
O PostgreSQL limita o número máximo de conexões simultâneas com o 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 sua camada de computação. O valor permitido é 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. Esta reserva seria normalmente 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.
Conjunto de ligaçõ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 de aplicativo mais alta.
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 pool 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 que estão sendo criadas constantemente no servidor.
PGBouncer
é uma solução de pool de conexões incorporada ao Banco de Dados do Azure para PostgreSQL. Para ativar o pgBouncer:
- No portal do Azure, navegue até o Banco de Dados do Azure para servidor 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 PgBouncer. Essa configuração não requer uma reinicialização do servidor.
- Defina pgbouncer.default_pool_size para o número de conexões por par usuário/banco de dados que você precisa. O padrão é 50.
- Defina o parâmetro pgBouncer.pool_mode como TRANSACTION.
Nota
O PgBouncer é suportado em camadas de computação de uso geral e otimizadas para memória em redes de acesso público e privado. PgBouncer não é suportado na camada de computação Burstable. Quando a camada de computação é alterada de Uso Geral ou Memória Otimizada para Burstable, a capacidade PGBouncer é perdida.