Partilhar via


PgBouncer no Banco de Dados do Azure para PostgreSQL - Servidor Flexível

APLICA-SE A: Banco de Dados do Azure para PostgreSQL - Servidor Flexível

O servidor flexível do Banco de Dados do Azure para PostgreSQL oferece o PgBouncer como uma solução interna de pool de conexões. PgBouncer é um recurso opcional que você pode habilitar por servidor de banco de dados. Ele é suportado em camadas de computação de uso geral e memória otimizada em redes de acesso público e privado.

O PgBouncer é executado na mesma máquina virtual (VM) que o servidor de banco de dados do Banco de Dados do Azure para servidor flexível PostgreSQL. O Postgres usa um modelo baseado em processos para conexões, portanto, manter muitas conexões ociosas é caro. O Postgres enfrenta restrições de recursos quando o servidor executa mais de alguns milhares de conexões. O principal benefício do PgBouncer é melhorar as conexões ociosas e as conexões de curta duração no servidor de banco de dados.

O PgBouncer usa um modelo leve que utiliza E/S assíncronas. Ele usa conexões Postgres somente quando necessário, ou seja, quando está dentro de uma transação aberta ou quando uma consulta está ativa. Este modelo permite dimensionamento para até 10.000 conexões com baixa sobrecarga.

O PgBouncer é executado na porta 6432 no servidor de banco de dados. Você pode alterar a configuração de conexão de banco de dados do seu aplicativo para usar o mesmo nome de host, mas altere a porta para 6432 para começar a usar o PgBouncer e se beneficiar do dimensionamento aprimorado de conexões ociosas.

PgBouncer no Banco de Dados do Azure para servidor flexível PostgreSQL dá suporte à autenticação Microsoft Entra (Azure AD).

Habilitando e configurando o PgBouncer

Para habilitar o PgBouncer, vá para o painel Parâmetros do servidor no portal do Azure, procure PgBouncer e altere a pgbouncer.enabled configuração para true. Não há necessidade de reiniciar o servidor.

Você pode definir as configurações do PgBouncer usando esses parâmetros.

Nota

A lista a seguir de parâmetros do servidor PgBouncer será visível no painel Parâmetros do servidor somente se o pgbouncer.enabled parâmetro do servidor estiver definido como true. Caso contrário, eles são deliberadamente escondidos.

Nome do parâmetro Description Predefinido
pgbouncer.default_pool_size Defina esse valor de parâmetro para o número de conexões por par usuário/banco de dados. 50
pgbouncer.ignore_startup_parameters Insira uma lista separada por vírgulas de parâmetros que o PgBouncer pode ignorar. Por exemplo, você pode deixar PgBouncer ignorar o extra_float_digits parâmetro. Alguns parâmetros são permitidos; todos os outros suscitam um erro. Essa capacidade é necessária para tolerar o JDBC (Java Database Connectivity) excessivamente entusiasmado que deseja definir extra_float_digits=2 incondicionalmente em pacotes de inicialização. Use esta opção se a biblioteca que você usa relatar erros como pq: unsupported startup parameter: extra_float_digits.
pgbouncer.max_cliente_conn Defina esse valor de parâmetro para o maior número de conexões de cliente para PgBouncer que você deseja suportar. 5000
pgbouncer.max_preparadas_declarações Quando isso é definido como um valor diferente de zero, o PgBouncer rastreia instruções preparadas no nível do protocolo, comandos relacionados enviados pelo cliente no modo de pool de transações e instruções. 0
pgbouncer.min_pool_size Adicione mais conexões de servidor ao pool se estiver abaixo desse número. 0
pgbouncer.pool_mode Defina esse valor de parâmetro como TRANSACTION para pool de transações (que é a configuração recomendada para a maioria das cargas de trabalho). transação
pgbouncer.query_wait_timeout O tempo máximo (em segundos) das consultas pode ser gasto aguardando a execução. Se a consulta não for atribuída a um servidor durante esse tempo, o cliente será desconectado. 120
pgbouncer.server_idle_timeout Se uma conexão de servidor tiver ficado ociosa mais do que esses segundos, ela será descartada. Se 0, o tempo limite está desativado. 600
pgbouncer.stats_users Lista separada por vírgulas de usuários de banco de dados que têm permissão para se conectar e executar consultas somente leitura no console do pgBouncer.

Para obter mais informações sobre as configurações do PgBouncer, consulte a documentação do pgbouncer.ini.

Versão do PgBouncer

Atualmente, a versão do PgBouncer implantada em todas as versões principais suportadas do mecanismo (16, 15, 14, 13, 12, 11), no Banco de Dados do Azure para Servidor Flexível PostgreSQL, é 1.22.1.

Benefícios

Usando o recurso PgBouncer interno com o Banco de Dados do Azure para servidor flexível PostgreSQL, você pode obter estes benefícios:

  • Conveniência da configuração simplificada: Como o PgBouncer está integrado ao Banco de Dados do Azure para servidor flexível PostgreSQL, não há necessidade de uma instalação separada ou configuração complexa. Você pode configurá-lo diretamente dos parâmetros do servidor.

  • Confiabilidade de um serviço gerenciado: o PgBouncer oferece as vantagens dos serviços gerenciados do Azure. Por exemplo, o Azure gerencia atualizações do PgBouncer. As atualizações automáticas eliminam a necessidade de manutenção manual e garantem que o PgBouncer se mantenha atualizado com os recursos e patches de segurança mais recentes.

  • Suporte para vários tipos de conexão: PgBouncer no Banco de Dados do Azure para servidor flexível PostgreSQL fornece suporte para conexões públicas e privadas. Você pode usá-lo para estabelecer conexões seguras em redes privadas ou conectar-se externamente, dependendo de suas necessidades específicas.

  • Alta disponibilidade em cenários de failover: Se um servidor em espera for promovido para a função principal durante um failover, o PgBouncer reinicia perfeitamente no modo de espera recém-promovido. Não é necessário fazer alterações na cadeia de conexão do aplicativo. Essa capacidade ajuda a garantir a disponibilidade contínua e minimiza a interrupção no pool de conexões do aplicativo.

Monitoramento PgBouncer

Métricas

O servidor flexível do Banco de Dados do Azure para PostgreSQL fornece seis métricas para monitorar o pool de conexões PgBouncer:

Nome a apresentar ID da métrica Unit descrição Dimensão Padrão ativado
Conexões de cliente ativas (visualização) client_connections_active Count Conexões de clientes associados a um Banco de Dados do Azure para conexão de servidor flexível PostgreSQL DatabaseName Não
Aguardando conexões de cliente (visualização) client_connections_waiting Count Conexões de clientes que estão aguardando uma conexão de servidor flexível do Banco de Dados do Azure para PostgreSQL para atendê-los DatabaseName Não
Conexões de servidor ativas (visualização) server_connections_active Count Conexões com o Banco de Dados do Azure para servidor flexível PostgreSQL que uma conexão de cliente está usando DatabaseName Não
Conexões de servidor ociosas (visualização) server_connections_idle Count Conexões com o Banco de Dados do Azure para servidor flexível PostgreSQL que estão ociosas e prontas para atender a uma nova conexão de cliente DatabaseName Não
Total de conexões agrupadas (visualização) total_pooled_connections Count Número atual de conexões agrupadas DatabaseName Não
Número de pools de conexões (visualização) num_pools Count Número total de pools de conexões DatabaseName Não

Para saber mais, consulte Métricas do PgBouncer.

Consola de administração

PgBouncer também fornece um banco de dados interno chamado pgbouncer. Quando você se conecta a esse banco de dados, você pode executar SHOW comandos que fornecem informações sobre o estado atual do PgBouncer.

Para se conectar ao pgbouncer banco de dados:

  1. Defina o pgBouncer.stats_users parâmetro como o nome de um usuário existente (por exemplo, myUser) e aplique as alterações.

  2. Conecte-se ao pgbouncer banco de dados como este usuário e defina a porta como 6432:

    psql "host=myPgServer.postgres.database.azure.com port=6432 dbname=pgbouncer user=myUser password=myPassword sslmode=require"
    

Depois de se conectar ao banco de dados, use SHOW comandos para exibir as estatísticas do PgBouncer:

  • SHOW HELP: Liste todos os comandos disponíveis SHOW .
  • SHOW POOLS: Mostrar o número de conexões em cada estado para cada pool.
  • SHOW DATABASES: Mostrar os limites de conexão aplicados atualmente para cada banco de dados.
  • SHOW STATS: Mostrar estatísticas sobre solicitações e tráfego para cada banco de dados.

Para obter mais informações sobre os comandos PgBouncer SHOW , consulte Admin Console.

Mudar a sua aplicação para utilizar o PgBouncer

Para começar a usar o PgBouncer, siga estas etapas:

  1. Ligue ao servidor de bases de dados, mas utilize a porta 6432 em vez da porta 5432 regular. Verifique se essa conexão funciona.

    psql "host=myPgServer.postgres.database.azure.com port=6432 dbname=postgres user=myUser password=myPassword sslmode=require"
    
  2. Teste seu aplicativo em um ambiente de controle de qualidade contra o PgBouncer, para garantir que você não tenha problemas de compatibilidade. O projeto PgBouncer fornece uma matriz de compatibilidade e recomendamos o pool de transações para a maioria dos usuários.

  3. Altere seu aplicativo de produção para se conectar à porta 6432 em vez de 5432. Monitore quaisquer erros do lado do aplicativo que possam apontar para problemas de compatibilidade.

PgBouncer em alta disponibilidade com redundância de zona

Em servidores de alta disponibilidade (HA) com redundância de zona, o servidor primário executa o PgBouncer. Você pode se conectar ao PgBouncer no servidor primário pela porta 6432. Após um failover, o PgBouncer é reiniciado no modo de espera recém-promovido, que agora é o servidor primário. Assim, a cadeia de conexão do aplicativo permanece a mesma após o failover.

Usando o PgBouncer com outros pools de conexões

Em alguns casos, você já pode ter um pool de conexões do lado do aplicativo ou ter o PgBouncer configurado no lado do aplicativo (por exemplo, um sidecar do Serviço Kubernetes do Azure). Nesses casos, o recurso PgBouncer integrado ainda pode ser útil porque fornece os benefícios do dimensionamento de conexão ociosa.

Usar um pool do lado do aplicativo junto com o PgBouncer no servidor de banco de dados pode ser benéfico. Aqui, o pool do lado do aplicativo traz o benefício da latência de conexão inicial reduzida (porque a viagem de ida e volta para inicializar a conexão é muito mais rápida) e o PgBouncer do lado do banco de dados fornece dimensionamento de conexão ociosa.

Limitações

  • O recurso PgBouncer atualmente não é suportado com a camada de computação do servidor Burstable. Se você alterar a camada de computação de Uso Geral ou Memória Otimizada para Burstable, perderá o recurso interno do PgBouncer.

  • Sempre que o servidor é reiniciado durante operações de escala, failover de HA ou uma reinicialização, o PgBouncer e a VM também são reiniciados. Em seguida, você tem que restabelecer as conexões existentes.

  • O portal não mostra todos os parâmetros do PgBouncer. Depois de habilitar o PgBouncer e salvar os parâmetros, você precisa fechar o painel Parâmetros do servidor (por exemplo, selecione Visão geral) e, em seguida, voltar para o painel Parâmetros do servidor.

  • Não é possível usar modos de pool de instruções junto com instruções preparadas. A versão atual do PgBouncer adicionou suporte para instruções preparadas dentro do modo de transação. Este suporte pode ser ativado e configurado através max_prepared_statements parâmetro. Definir esse parâmetro acima do valor padrão de 0 ativará o suporte para instruções preparadas. Este suporte aplica-se apenas a declarações preparadas a nível de protocolo. Para a maioria das linguagens de programação, isso significa que estamos usando a função libpq PQprepare no cliente, enviando comandos de nível de protocolo que o PgBouncer pode intercetar, em vez de emitir um comando SQL dinâmico semelhante ao PREPARE proc AS, que está enviando texto que o PgBouncer não interpretará corretamente. Para verificar outras limitações do modo de piscina escolhido, consulte a documentação do PgBouncer.

  • Se o PgBouncer for implantado como um recurso, ele se tornará um potencial ponto único de falha. Se o recurso PgBouncer estiver inativo, ele poderá interromper todo o pool de conexões do banco de dados e causar tempo de inatividade para o aplicativo. Para atenuar o único ponto de falha, você pode configurar várias instâncias PgBouncer atrás de um balanceador de carga para alta disponibilidade em VMs do Azure.

  • Restrição de tamanho de token com autenticação AAD - Usuários com um grande número de associações de grupo não poderão se conectar por meio do PgBouncer devido a uma restrição de tamanho de token. Aplicativos, serviços e usuários com um pequeno número de grupos funcionam.

  • PgBouncer é um aplicativo leve que usa uma arquitetura single-threaded. Esse design é ótimo para a maioria das cargas de trabalho de aplicativos. Mas em aplicativos que criam um grande número de conexões de curta duração, esse design pode afetar o desempenho do pgBouncer e limitar sua capacidade de dimensionar seu aplicativo. Talvez seja necessário tentar uma destas abordagens:

    • Distribua a carga de conexão entre várias instâncias PgBouncer em VMs do Azure.
    • Considere soluções alternativas, incluindo soluções multithreaded como PgCat, em VMs do Azure.

Importante

O parâmetro pgbouncer.client_tls_sslmode para o recurso PgBouncer interno foi preterido no Banco de Dados do Azure para o servidor flexível PostgreSQL.

Quando TLS/SSL para conexões com o Banco de Dados do Azure para servidor flexível PostgreSQL é imposto por meio da configuração do require_secure_transport parâmetro de servidor como ON, TLS/SSL é automaticamente imposto para conexões com o recurso PgBouncer interno. Essa configuração é ativada por padrão quando você cria uma nova instância de servidor flexível do Banco de Dados do Azure para PostgreSQL e habilita o recurso interno PgBouncer. Para obter mais informações, consulte Visão geral de rede do Banco de Dados do Azure para PostgreSQL - Servidor flexível com acesso privado.

Para clientes que desejam gerenciamento simplificado, alta disponibilidade integrada, conectividade fácil com aplicativos em contêineres e a capacidade de usar os parâmetros de configuração mais populares, o recurso PgBouncer integrado é uma boa escolha. Para clientes que desejam escalabilidade multithread, controle total de todos os parâmetros e uma experiência de depuração, configurar o PgBouncer em VMs do Azure pode ser uma alternativa.

Próximos passos