PgBouncer - 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 pooling 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 do 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 servidor flexível PgBouncer no Banco de Dados do Azure para PostgreSQL dá suporte à Autenticação do Microsoft Entra (Azure AD).
Habilitando e configurando o PgBouncer
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 | Definir esse valor de parâmetro como o número mais alto de conexões de cliente para PgBouncer que você deseja dar suporte. | 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.
Versão do PgBouncer
Atualmente, a versão do PgBouncer implantada em todas as versões principais com suporte do mecanismo (16, 15, 14, 13, 12, 11) no Servidor Flexível do Banco de Dados do Azure para PostgreSQL é 1.22.1.
Benefícios
Usando o recurso PgBouncer interno com o 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 ao servidor flexível do Banco de Dados do Azure para 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 permaneça atualizado com os recursos mais recentes e os patches de segurança.
Suporte para vários tipos de conexão: o PgBouncer no servidor flexível do Banco de Dados do Azure para PostgreSQL oferece 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
O servidor flexível do Banco de Dados do Azure para PostgreSQL fornece seis métricas para monitorar o pooling de conexões PgBouncer:
Nome de exibição | ID da métrica | Unidade | descrição | Dimensão | Padrão: habilitada |
---|---|---|---|---|---|
Conexões de cliente ativo (versão prévia) | client_connections_active |
Count | Conexões de clientes associados a uma conexão do servidor flexível do Banco de Dados do Azure para PostgreSQL | DatabaseName |
Não |
Aguardando conexões do cliente (versão prévia) | client_connections_waiting |
Count | 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 | DatabaseName |
Não |
Conexões de servidor ativo (versão prévia) | server_connections_active |
Count | Conexões com o servidor flexível do Banco de Dados do Azure para PostgreSQL que uma conexão de cliente está usando | DatabaseName |
Não |
Conexões de servidor ocioso (versão prévia) | server_connections_idle |
Count | 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 | DatabaseName |
Não |
Total de conexões em pool (versão prévia) | total_pooled_connections |
Count | Número atual de conexões em pool | DatabaseName |
Não |
Número de pools de conexões (versão prévia) | num_pools |
Count | Número total de pools de conexão | DatabaseName |
Não |
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_users
como o nome de um usuário existente (por exemplo,myUser
), e aplique as alterações.Conecte-se ao banco de dados
pgbouncer
como este usuário e defina a porta como6432
: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 comandos SHOW
para exibir estatísticas do PgBouncer:
SHOW HELP
: listar todos os comandosSHOW
disponí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=myPassword 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. Esse suporte só se aplica às instruções preparadas de 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 Autenticação do AAD – 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 servidor flexível do Banco de Dados do Azure para PostgreSQL.
Quando o TLS/SSL para conexões com o servidor flexível do Banco de Dados do Azure para PostgreSQL é imposto por meio da configuração do parâmetro de servidor require_secure_transport
como 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 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 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.
Próximas etapas
- Saiba mais sobre conceitos de rede.
- Obtenha uma visão geral do servidor flexível do Banco de Dados do Azure para PostgreSQL.