Compreender o gerenciamento de conexões

Concluído

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:

  1. No portal do Azure, navegue até o servidor do Banco de Dados do Azure para PostgreSQL.
  2. No menu à esquerda, selecione Parâmetros do Servidor.
  3. Na barra de pesquisa, procure por PgBouncer.
  4. Defina a configuração pgbouncer.enabled como true para habilitar o PgBouncer. Essa configuração não requer uma reinicialização do servidor.
  5. 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.
  6. 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.