Compreender o tratamento da ligação

Concluído

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:

  1. No portal do Azure, navegue até o Banco de Dados do Azure para servidor 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 PgBouncer. Essa configuração não requer uma reinicialização do servidor.
  5. 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.
  6. 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.