Todos os produtos
Search
Central de documentação

PolarDB:Níveis de consistência

Última atualização: Jun 28, 2026

Quando a divisão de leitura e gravação encaminha instruções SELECT para nós somente leitura, esses nós podem ficar atrasados em relação ao nó primário devido à replicação assíncrona. O PolarDB for PostgreSQL oferece dois níveis de consistência — consistência eventual e consistência de sessão (também chamada de consistência de leitura no nível de transação) — para controlar como sua aplicação lida com essa defasagem de replicação.

Como funciona

O PolarDB opera em uma arquitetura de cluster. Cada cluster contém um nó primário e um ou mais nós somente leitura. Conecte-se ao cluster usando dois tipos de endpoint:

  • Cluster endpoint (recomendado): distribui o tráfego entre todos os nós e ativa a divisão de leitura e gravação automaticamente.

  • Primary endpoint: direciona todo o tráfego exclusivamente para o nó primário.

A camada de proxy integrada gerencia a divisão de leitura e gravação. Ela analisa cada instrução SQL e encaminha operações de escrita (INSERT, UPDATE, DELETE, CREATE) para o nó primário e operações de leitura (SELECT) para os nós somente leitura.

A replicação de dados do nó primário para os nós somente leitura utiliza replicação física assíncrona baseada em write-ahead logging (WAL). Sob carga normal, a replicação é concluída em poucos milissegundos. Com carga leve, a latência de sincronização pode ser reduzida para menos de cinco segundos. Já sob carga intensa — como operações DDL em tabelas grandes ou inserções em massa — a latência de sincronização pode aumentar significativamente.

WAL for read/write splitting in PolarDB for PostgreSQL

Como a replicação é assíncrona, um SELECT encaminhado a um nó somente leitura pode retornar dados que ainda não refletem as escritas mais recentes no nó primário. Os dois níveis de consistência determinam como o PolarDB gerencia essa defasagem.

Níveis de consistência

Eventual consistency

Session consistency

Comportamento de leitura

O SELECT é encaminhado imediatamente a qualquer nó somente leitura disponível, sem aguardar a replicação.

O SELECT é enviado a um nó somente leitura que já concluiu a replicação das escritas da sessão atual.

Leituras desatualizadas

Possível — o nó pode não ter os dados mais recentes.

Impossível dentro de uma sessão — as leituras sempre refletem as escritas da mesma sessão.

Desempenho

Throughput ligeiramente maior; sem tempo de espera.

Sobrecarga mínima na maioria das cargas de trabalho.

Mais indicado para

Análises, relatórios e cargas de trabalho com muitas leituras, nas quais um pequeno atraso de replicação é aceitável.

Cargas de trabalho transacionais em que as leituras precisam refletir escritas recentes da mesma sessão.

Consistência eventual

Na consistência eventual, o proxy encaminha cada SELECT para qualquer nó somente leitura disponível, sem verificar se esse nó possui os dados mais recentes. O nó retorna os resultados imediatamente.

Isso significa que uma leitura após uma escrita na mesma sessão pode retornar dados desatualizados:

INSERT INTO t1(id, price) VALUES(111, 96);
UPDATE t1 SET price = 100 WHERE id=111;
SELECT price FROM t1;
-- May return 96 or NULL if the read-only node hasn't replicated the write yet

Utilize a consistência eventual para cargas de trabalho em que um pequeno atraso de replicação é aceitável: jobs agendados, consultas analíticas, relatórios agregados ou acesso somente leitura por usuários que não gravam dados.

Consistência de sessão

Com a consistência de sessão, o proxy garante que, após uma escrita em uma sessão, as leituras subsequentes na mesma sessão sejam encaminhadas apenas para nós somente leitura que já aplicaram essas escritas. O SELECT é enviado a um nó qualificado e retorna resultados atualizados.

O mesmo exemplo comporta-se de maneira previsível:

INSERT INTO t1(id, price) VALUES(111, 96);
UPDATE t1 SET price = 100 WHERE id=111;
SELECT price FROM t1;
-- Returns 100, guaranteed

A consistência de sessão adiciona uma sobrecarga mínima à maioria das cargas de trabalho e atende à grande maioria dos casos de uso transacional. Defina-a como padrão para aplicações em que os usuários leem suas próprias escritas recentes.

Funcionamento da consistência de sessão

Implementation

O proxy rastreia o progresso do log de redo em cada nó usando um número de sequência de log (LSN). Quando uma escrita é confirmada no nó primário, o proxy registra o LSN dessa escrita como o LSN da sessão.

Ao receber a próxima leitura na mesma sessão, o proxy compara o LSN da sessão com o LSN de cada nó somente leitura. Ele encaminha a leitura para um nó cujo LSN seja maior ou igual ao LSN da sessão, garantindo que o nó tenha aplicado a escrita. Enquanto o nó selecionado retorna os resultados ao cliente, os demais nós continuam replicando em segundo plano.

Esse mecanismo fornece consistência de sessão, divisão de leitura e gravação e balanceamento de carga simultaneamente.

Melhores práticas

Use a consistência de sessão na maioria das cargas de trabalho. Ela tem impacto mínimo no desempenho do cluster e resolve o cenário comum em que a aplicação lê dados que acabou de gravar.

Para consultas que precisam ler os dados absolutamente mais recentes — independentemente dos limites da sessão — redirecione-as para o nó primário usando a dica FORCE_MASTER:

/*FORCE_MASTER*/ select * from user;

Reserve o FORCE_MASTER para consultas específicas, em vez de usá-lo amplamente. Encaminhar todas as leituras para o nó primário elimina o benefício da divisão de leitura e gravação e aumenta a carga sobre o nó primário.