Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Importante
O Autoscaling do Lakebase é a versão mais recente do Lakebase, com computação autoescalável, escala até zero, ramificação e restauração instantânea. Para regiões suportadas, consulte Disponibilidade de Regiões. Se é utilizador do Lakebase Provisioned, consulte Lakebase Provisioned.
O Lakebase inclui um pooler de ligações PgBouncer incorporado que mantém um pool de ligações de servidor e as partilha entre várias ligações de clientes. O pooler suporta até 10.000 ligações simultâneas, tornando-o uma boa opção para funções serverless, APIs web e outras aplicações que abrem muitas ligações de curta duração.
O pooling de ligações requer autenticação nativa de senha do Postgres. Não está disponível para funções de identidade OAuth ou Azure Databricks.
Como funciona o pool de conexões
Cada ligação Postgres consome recursos do servidor porque o Postgres cria um processo separado para cada cliente. Aplicações que abrem muitas ligações de curta duração, como APIs web e funções serverless, podem esgotar rapidamente o limite de ligação do servidor.
O pooler de conexão fica entre a tua aplicação e o Postgres. Os clientes ligam-se ao pooler, e o pooler encaminha as consultas para um pool mais pequeno de ligações reais ao servidor. Quando uma transação é concluída, o pooler devolve a ligação do servidor ao pool, tornando-a disponível para o próximo cliente.
A Lakebase executa o PgBouncer em modo de transação. No modo de transação, uma ligação ao servidor é mantida durante a duração de uma única transação e depois devolvida ao pool. Isto permite que muitos clientes partilhem um pequeno conjunto de ligações a servidores.
O modo de transação melhora a eficiência da ligação, mas restringe certas funcionalidades do Postgres que requerem uma ligação persistente ao servidor. Ver limitações do modo de transação.
Pools de conexões
O PgBouncer cria um pool separado para cada base de dados e combinação de utilizadores. Dois utilizadores que se ligam à mesma base de dados obtêm pools independentes. O tamanho de cada pool é aproximadamente 90% do limite de ligação direta do cálculo.
Quando todas as ligações de um pool estão em uso, novos pedidos de clientes aguardam numa fila. Se uma ligação ao servidor não ficar disponível dentro de 2 minutos, o cliente recebe um erro de timeout.
Limites de ligação
Três limites regem o agrupamento de ligações:
| Limite | Value | O que controla |
|---|---|---|
Ligações com clientes (max_client_conn) |
10.000 | Ligações máximas da sua aplicação com o PgBouncer |
Tamanho da piscina (default_pool_size) |
~90% de max_connections |
Ligações ativas de servidor por par (utilizador, base de dados) |
Ligações diretas (max_connections) |
Varia consoante o tamanho do cálculo | Ligações diretas máximas da Postgres |
O limite de ligação direta depende do tamanho do seu cálculo. Por exemplo, uma unidade de computação de 8 CU suporta 1.678 ligações diretas e uma unidade de computação de 16 CU suporta 3.357. Para a lista completa, veja Especificações de Computação.
O pool de conexões permite que a sua aplicação suporte muitos mais utilizadores concorrentes do que permitiria o limite de conexão direta.
Pré-requisitos
- O seu projeto de Autoscaling da Lakebase tem de estar ativo.
- É necessário ter uma função de senha nativa do Postgres no projeto. Para instruções, consulte Criar uma palavra-passe nativa do Postgres.
- Para usar o pooler de apenas leitura, deve ter um endpoint de alta disponibilidade com permitir acesso a instâncias de computação apenas de leitura ativado. Ver Alta disponibilidade.
Permitir o agrupamento de ligações
- Na aplicação Lakebase, aceda ao seu projeto e clique em Conectar.
- Seleciona o ramo e a computação a que te queres ligar.
- No menu suspenso de Funções , selecione uma função nativa de palavra-passe Postgres. A opção Pooling de Conexões só é visível quando uma função de palavra-passe é selecionada. Está oculto para os roles de identidade OAuth e Azure Databricks.
- Ativar pool de conexões.
- Copia a cadeia de ligação e usa-a na tua aplicação.
Formatos de cadeia de conexão
As cadeias de ligação do pooler usam um nome de host diferente das ligações diretas à base de dados:
| Tipo | Formato do nome do anfitrião | Quando utilizar |
|---|---|---|
| Pooler de leitura e escrita | <endpoint-id>-pooler.<region>.<cloud>.databricks.com |
Todo o tráfego de escrita e de leitura é encaminhado através do pooler |
| Pooler de apenas leitura | <endpoint-id>-ro-pooler.<region>.<cloud>.databricks.com |
Leia apenas trânsito. Requer um endpoint de alta disponibilidade com acesso de leitura ativado. |
Ambos os tipos de pooler usam a porta 5432.
Note
Copie o seu pooler cadeia de ligação diretamente do diálogo Connect na aplicação do Lakebase para obter o nome de host correto para o endpoint, região e nuvem.
Limitações do modo de transação
As seguintes funcionalidades do Postgres não estão disponíveis ao usar o pooler de ligações:
Instruções preparadas ao nível SQL:
PREPAREeDEALLOCATEinstruções não são suportadas em modo de transação. As instruções preparadas ao nível do driver (usadas internamente pelo psycopg2, node-postgres, JDBC e bibliotecas semelhantes) funcionam corretamente graças ao suporte de nível de protocolo do PgBouncer. Para JDBC, se vires erros relacionados com instruções preparadas, configuraprepareThreshold=0para desativar a cache de instruções preparadas nomeadas do lado do servidor.Definições ao nível da sessão:
SETos comandos não persistem entre transações porque cada transação pode usar uma ligação diferente ao servidor. Por exemplo:BEGIN; SET search_path TO myschema; SELECT * FROM mytable; -- works in this transaction COMMIT; -- connection returns to pool after COMMIT SELECT * FROM mytable; -- ERROR: relation "mytable" does not existPara aplicar uma definição permanentemente, use
ALTER ROLEem vez disso:ALTER ROLE myrole SET search_path TO myschema, public;Tabelas temporárias realizadas em sessões: Tabelas temporárias que persistem entre transações não estão disponíveis. Uma ligação devolvida ao pool pode ser atribuída a um cliente diferente na próxima transação.
WITH HOLDcursores: Os cursores declarados comWITH HOLDrequerem uma ligação persistente e não são suportados.Bloqueios de aviso: O PgBouncer não suporta bloqueios de aviso. Os bloqueios de aviso exigem uma ligação persistente ao servidor, que não está disponível no modo de transação.
LISTEN/NOTIFY: Não suportado. Utilize uma ligação direta (não partilhada) para aplicações que requerem mensagens de publicação/assinatura.pg_dumpe migrações de esquema: Use uma ligação direta parapg_dump, migrações de esquema e outras ferramentas que dependam do estado ao nível da sessão.
Note
Para aplicações que requerem funcionalidades Postgres ao nível da sessão, use uma cadeia de ligação direta a partir do diálogo Conectar sem ativar a opção Connection pooling.
Passos seguintes
- Cadeias de conexão: Referência de formato de cadeia de conexão para conexões diretas. Ver cadeias de conexão.
- Criar funções Postgres: Como criar funções nativas de palavra-passe Postgres necessárias para pooling de ligações. Ver Criar funções de Postgres.
- Sobre autenticação: Comparação entre métodos OAuth e autenticação por palavra-passe. Veja Sobre autenticação.