Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
As instâncias de servidor flexível do Azure Database para PostgreSQL oferecem PgBouncer como uma solução interna de pool de conexões. PgBouncer é um recurso opcional que você pode habilitar por servidor por banco de dados. Ele tem suporte em camadas de computação com Uso Geral e Otimizado para Memória em redes de acesso público e de acesso privado.
O PgBouncer é executado na mesma VM (máquina virtual) que o servidor de banco de dados da instância de servidor flexível do Banco de Dados do Azure para PostgreSQL. O Postgres usa um modelo baseado em processo para conexões, portanto, manter muitas conexões ociosas é caro. O Postgres é executado em restrições de recurso quando o servidor executa mais de alguns milhares de conexões. O principal benefício do PgBouncer é melhorar conexões ociosas e conexões de curta duração no servidor de banco de dados.
PgBouncer usa um modelo leve que utiliza E/S assíncrona. Ele usa conexões Postgres somente quando necessário, ou seja, quando dentro de uma transação aberta ou quando uma consulta está ativa. Esse modelo permite dimensionar 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ões de banco de dados do aplicativo para usar o mesmo nome de host, mas alterar a porta para 6432 para começar a usar o PgBouncer e se beneficiar de um dimensionamento aprimorado de conexões ociosas.
O PgBouncer no Banco de Dados do Azure para PostgreSQL dá suporte à autenticação do Microsoft Entra (Azure AD).
PgBouncer com clusters elásticos
O PgBouncer também está disponível para clusters elásticos. Cada nó em um cluster elástico tem sua própria instância do PgBouncer. Após ser habilitada, a porta 6432 será roteada para o PgBouncer no nó coordenador do cluster elástico. Além disso, a porta 8432 será roteada para as instâncias PgBouncer que estão em execução nos nós de trabalho do cluster.
Atualmente, a versão do PgBouncer implantada em todas as versões principais com suporte do mecanismo (18, 17, 16, 15, 14, 13, 12, 11), no Banco de Dados do Azure para PostgreSQL, é 1.23.1.
Habilitar e configurar o PgBouncer
O PgBouncer é especialmente útil em aplicativos transacionais em que a variação de conexão frequente pode prejudicar o desempenho. Ele é habilitado por padrão na porta 6432 e você pode se conectar a ela usando o mesmo nome de host que o servidor PostgreSQL, mas com a porta 6432 em vez da porta padrão 5432.
Para habilitar o PgBouncer, acesse o painel Parâmetros do servidor no portal do Azure, pesquise por PgBouncer e altere a configuração pgbouncer.enabled para true. Não é necessário reiniciar o servidor.
Você pode definir as configurações do PgBouncer usando esses parâmetros.
Observação
A lista a seguir de parâmetros de servidor PgBouncer ficará visível no painel Parâmetros do servidor somente se o parâmetro do servidor pgbouncer.enabled estiver definido como true. Caso contrário, eles estão deliberadamente escondidos.
| Nome do parâmetro | Descrição | Padrão |
|---|---|---|
| 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 permitir que PgBouncer ignore o parâmetro extra_float_digits. Alguns parâmetros são permitidos; todos os outros geram um erro. Essa capacidade é necessária para tolerar o excesso de entusiasmo do JDBC (Conectividade de Banco de Dados Java excessiva) em querer definir extra_float_digits=2 incondicionalmente em pacotes de inicialização. Use essa opção se a biblioteca que você usa relata erros como pq: unsupported startup parameter: extra_float_digits. |
|
| pgbouncer.max_client_conn | Defina esse valor de parâmetro como o número máximo de conexões de cliente com PgBouncer que você deseja dar suporte. O padrão é 5000, com um intervalo permitido de 1 a 50.000 | 5.000 |
| pgbouncer.max_prepared_statements | Quando isso é definido como um valor diferente de zero, o PgBouncer acompanha os comandos relacionados às instruções nomeadas preparadas no nível do protocolo enviadas pelo cliente no modo de instruções e pooling de 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 | Definir esse valor de parâmetro como TRANSACTION para pooling de transações (que é a configuração recomendada para a maioria das cargas de trabalho). | transação |
| pgbouncer.query_wait_timeout | Tempo máximo (em segundos) que as consultas podem levar aguardando a execução. Se a consulta não for atribuída a um servidor durante esse período, o cliente será desconectado. | 120 |
| pgbouncer.server_idle_timeout | Se uma conexão de servidor estiver ociosa mais do que esses muitos segundos, ela será descartada. Se 0, o tempo limite será desabilitado. | 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.
Benefícios
Usando o recurso PgBouncer interno com sua instância de servidor flexível do Banco de Dados do Azure para PostgreSQL, você pode obter estes benefícios:
Conveniência da configuração simplificada: como o PgBouncer é integrado à instância de servidor flexível do Banco de Dados do Azure para PostgreSQL, não há necessidade de uma instalação separada ou uma instalaçã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 permaneça atualizado com os recursos mais recentes e os patches de segurança.
Suporte para vários tipos de conexão: PgBouncer no Banco de Dados do Azure para PostgreSQL fornece suporte para conexões públicas e privadas. Você pode usá-lo para estabelecer conexões seguras em redes privadas ou se conectar externamente, dependendo de seus requisitos específicos.
Alta disponibilidade em cenários de failover: se um servidor em espera for promovido à função primária durante um failover, o PgBouncer será reiniciado perfeitamente em espera recém-promovido. Você não precisa fazer nenhuma alteração 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.
Monitorando as Métricas do PgBouncer
Métricas
Você pode usar as métricas do PgBouncer para monitorar o desempenho do processo do PgBouncer, incluindo detalhes de conexões ativas, conexões ociosas, total de conexões agrupadas e o número de pools de conexões. Cada métrica é emitida em um intervalo de 1 minutos e tem até 93 dias de histórico. Os clientes podem configurar alertas sobre as métricas e também acessar as novas dimensões das métricas para dividir e filtrar os dados das métricas pelo nome do banco de dados.
Como habilitar métricas do PgBouncer
- Para monitorar as métricas do PgBouncer, verifique se o recurso pgbouncer está habilitado por meio do parâmetro
pgbouncer.enabledde servidor e o parâmetrometrics.pgbouncer_diagnosticsde métricas está habilitado. - Esses parâmetros são dinâmicos e não exigem uma reinicialização de instância.
- As métricas do PgBouncer estão desabilitadas por padrão.
Lista de métricas do PgBouncer
| Nome de exibição | ID da métrica | Unidade | Descrição | Dimensão | Padrão: habilitada |
|---|---|---|---|---|---|
| Conexões de cliente ativas | client_connections_active |
Contagem | Conexões de clientes associados a uma conexão do servidor flexível do Banco de Dados do Azure para PostgreSQL. | Nome do Banco de Dados | Não |
| Aguardando conexões de cliente | client_connections_waiting |
Contagem | Conexões de clientes que estão aguardando uma conexão do servidor flexível do Banco de Dados do Azure para PostgreSQL para atendê-los. | Nome do Banco de Dados | Não |
| Conexões de servidor ativas | server_connections_active |
Contagem | Conexões com o servidor flexível do Banco de Dados do Azure para PostgreSQL que estão sendo usadas por uma conexão de cliente. | Nome do Banco de Dados | Não |
| Conexões de servidor ociosas | server_connections_idle |
Contagem | Conexões com o servidor flexível do Banco de Dados do Azure para PostgreSQL que estão ociosas e prontas para atender a uma nova conexão de cliente. | Nome do Banco de Dados | Não |
| Total de conexões em pool | total_pooled_connections |
Contagem | O número atual de conexões agrupadas. | Nome do Banco de Dados | Não |
| Número de pools de conexões | num_pools |
Contagem | O número total de pools de conexão. | Nome do Banco de Dados | Não |
Considerações sobre o uso das métricas do PGBouncer
- As métricas do PgBouncer que usam a dimensão DatabaseName têm um limite de 30 bancos de dados .
- Na SKU Burstable, o limite é de 10 bancos de dados que possuem a dimensão DatabaseName.
- O limite da dimensão DatabaseName é aplicado à coluna OID, que reflete a ordem de criação do banco de dados.
Para saber mais, confira as métricas do PgBouncer.
Console de administração
O PgBouncer também fornece um banco de dados interno chamado pgbouncer. Ao se conectar a esse banco de dados, você pode executar SHOW comandos que fornecem informações sobre o estado atual do PgBouncer.
Para se conectar ao banco de dados pgbouncer:
Defina o parâmetro
pgBouncer.stats_userscomo o nome de um usuário existente (por exemplo,myUser), e aplique as alterações.Conecte-se ao banco de dados
pgbouncercomo este usuário e defina a porta como6432:psql "host=myPgServer.postgres.database.azure.com port=6432 dbname=pgbouncer user=myUser password=<password> sslmode=require"
Depois de se conectar ao banco de dados, use comandos SHOW para exibir estatísticas do PgBouncer:
-
SHOW HELP: listar todos os comandosSHOWdisponíveis. -
SHOW POOLS: mostrar o número de conexões em cada estado para cada pool. -
SHOW DATABASES: mostrar os limites atuais de conexão aplicada 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 SHOW do PgBouncer, consulte console do Administrador.
Alternando seu aplicativo para usar PgBouncer
Para começar a usar PgBouncer, siga estas etapas:
Conecte-se ao servidor de banco de dados, mas use a porta 6432 em vez da porta regular 5432. Verifique se essa conexão funciona.
psql "host=myPgServer.postgres.database.azure.com port=6432 dbname=postgres user=myUser password=<password> sslmode=require"Teste seu aplicativo em um ambiente de QA em relação ao PgBouncer para garantir que você não tenha problemas de compatibilidade. O projeto PgBouncer fornece uma matriz de compatibilidade e recomendamos o pooling de transações para a maioria dos usuários.
Altere seu aplicativo de produção para se conectar à porta 6432 em vez de 5432. Monitore os erros do lado do aplicativo que possam apontar para problemas de compatibilidade.
PgBouncer em alta disponibilidade com redundância de zona
Em servidores com redundância de zona e alta disponibilidade (HA), 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 em espera recém-promovido, que agora é o servidor primário. Portanto, a cadeia de conexão do aplicativo permanece a mesma após o failover.
Usando PgBouncer com outros pools de conexão
Em alguns casos, talvez você já tenha um pool de conexões do lado do aplicativo ou tenha o PgBouncer configurado no lado do aplicativo (por exemplo, um sidecar do Serviço de Kubernetes do Azure). Nesses casos, o recurso interno do PgBouncer ainda pode ser útil porque oferece os benefícios do dimensionamento de conexão ocioso.
O uso de 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 ocioso.
Limitações
- No momento, não há suporte para o recurso PgBouncer com a camada de computação do servidor com capacidade de intermitência. Se você alterar a camada de computação de Uso Geral ou Otimizado para Memória Otimizada para Com capacidade de intermitência, perderá a funcionalidade interna 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ê precisa restabelecer as conexões existentes.
- O portal não mostra todos os parâmetros PgBouncer. Depois de habilitar o PgBouncer e salvar os parâmetros, você precisará fechar o painel Parâmetros do servidor (por exemplo, selecione Visão Geral) e, em seguida, volte para o painel Parâmetros do servidor.
- Você não pode usar os 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. Esse suporte pode ser habilitado e configurado por meio do parâmetro max_prepared_statements. A definição desse 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 ao nível do protocolo. Na maioria das linguagens de programação, isso significa que estamos usando a função libpq do PQprepare no cliente, enviando comandos de nível de protocolo que o PgBouncer pode interceptar, em vez de emitir um comando SQL dinâmico semelhante a PREPARE proc AS, que envia textos que o PgBouncer não interpretará corretamente. Para verificar outras limitações do modo de pool escolhido, consulte a documentação do PgBouncer.
- Se o PgBouncer for implantado como um recurso, ele se tornará um possível ponto único de falha. Se o recurso PgBouncer estiver inativo, ele poderá interromper todo o pool de conexões de 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 por trás de um balanceador de carga para alta disponibilidade em VMs do Azure.
- Restrição de tamanho de token com a Autenticação do Azure AD – os 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 de thread único. Esse design é ótimo para a maioria das cargas de trabalho do aplicativo. 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 experimentar uma destas abordagens:
- Distribua a carga de conexão entre várias instâncias do 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 PostgreSQL.
Quando o TLS/SSL para conexões com uma instância de servidor flexível do Banco de Dados do Azure para PostgreSQL é imposto por meio da definição do parâmetro de servidor require_secure_transport para ON, o TLS/SSL é automaticamente imposto para conexões com o recurso interno PgBouncer. Essa configuração está 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 Conectividade segura com TLS no Banco de Dados do Azure para PostgreSQL.
Para clientes que desejam gerenciamento simplificado, alta disponibilidade interna, conectividade fácil com aplicativos em contêineres e a capacidade de usar os parâmetros de configuração mais populares, o recurso Interno PgBouncer é uma boa opção. Para clientes que desejam escalabilidade multithreaded, 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.