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.
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 agregador de ligações suporta até 10 000 ligações simultâneas de clientes, sendo por isso uma boa solução para funções serverless, APIs da Web e outras aplicações que abrem muitas ligações de curta duração.
O agrupamento de ligações requer autenticação por palavra-passe nativa do Postgres. Não está disponível para funções OAuth.
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. À medida que as ligações simultâneas crescem, 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. O Lakebase executa o PgBouncer em modo de transação, pelo que uma ligação ao servidor é mantida apenas 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 ao servidor.
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 do Postgres max_connections , que varia consoante o tamanho 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.
O diagrama mostra como múltiplas ligações de clientes de diferentes utilizadores passam por pools PgBouncer separados (uma por combinação utilizador/base de dados), que partilham um número limitado de ligações Postgres reais.
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 limite de 10.000 ligações de clientes não significa 10.000 resultados simultâneos de consultas. Representa o número máximo de ligações de clientes que o PgBouncer aceita. O número de transações ativas concorrentes é limitado pelo tamanho do pool, que é aproximadamente 90% de max_connections.
Permitir o agrupamento de ligações
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 agrupamento de ligações com instâncias de computação só de leitura, tem de ter um endpoint de alta disponibilidade com Permitir acesso a instâncias de computação só de leitura ativado. Ver Alta disponibilidade.
Steps
- 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. O comutador de agrupamento de ligações só é visível quando é selecionado um perfil com palavra-passe. Está oculto para as funções OAuth.
- 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. O nome do host inclui -pooler , após o ID do endpoint, para computação de leitura-escrita, ou -ro-pooler para computação apenas de leitura:
| Tipo de computação | Formato do nome do anfitrião | Quando utilizar |
|---|---|---|
| Computação de leitura e escrita | <endpoint-id>-pooler.<region>.<cloud>.databricks.com |
Todo o tráfego de escrita e de leitura |
| Computação só de 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 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.
Configuração do PgBouncer
A Lakebase gere o PgBouncer com as seguintes definições. Estas definições são fixas e não podem ser personalizadas.
[pgbouncer]
pool_mode=transaction
max_client_conn=10000
default_pool_size=0.9 * max_connections
max_prepared_statements=1000
query_wait_timeout=120
| Setting | Descrição |
|---|---|
pool_mode=transaction |
As ligações ao servidor regressam ao pool após cada transação. Ver modo de transação. |
max_client_conn=10000 |
Número máximo de ligações simultâneas de clientes aceites pelo PgBouncer. |
default_pool_size=0.9 * max_connections |
Ligações ativas ao servidor por par (utilizador, base de dados). Varia consoante o tamanho do cálculo. |
max_prepared_statements=1000 |
Permite instruções preparadas ao nível do protocolo em modo de transação. Limita as instruções rastreadas a 1.000 por ligação de cliente. |
query_wait_timeout=120 |
Número de segundos que um cliente espera por uma conexão ao servidor antes de ocorrer um erro de tempo limite. |
Modo de transação
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. As seguintes funcionalidades não estão disponíveis ao usar o connection pooler:
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 controlador (usadas internamente por psycopg, node-postgres, JDBC e bibliotecas semelhantes) funcionam corretamente através do suporte 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 do Postgres ao nível da sessão, use uma cadeia de ligação direta da caixa de diálogo Connect, sem ativar o interruptor Connection pooling.