Todos os produtos
Search
Central de documentação

PolarDB:Consistência global

Última atualização: Jul 14, 2026

Este tópico descreve os pré-requisitos, o contexto, o funcionamento, o procedimento e as perguntas frequentes (FAQs) sobre o recurso de consistência global.

Visão geral

O PolarDB for PostgreSQL e o oferecem um recurso de consistência global no nível do kernel do banco de dados que garante resultados fortemente consistentes para solicitações de leitura enviadas a qualquer nó do cluster.

Aplicabilidade

Este recurso é compatível com as seguintes versões do PolarDB for PostgreSQL:

  • PostgreSQL 14 (versão secundária do mecanismo 2.0.14.11.22.0 ou posterior).

Nota

Visualize a versão secundária do mecanismo no console ou execute a instrução SHOW polardb_version;. Se a versão secundária do mecanismo do cluster não atender aos requisitos, atualize-a.

Contexto

Na arquitetura original de escrita única e múltiplas leituras do PolarDB, os nós somente leitura fornecem consistência de sessão por padrão. Embora a replicação física e o armazenamento compartilhado reduzam eficazmente o atraso de replicação nesses nós, eles não garantem que as solicitações de leitura recuperem os dados mais recentes gravados no nó de leitura e gravação. Em setores sensíveis à latência, como finanças e jogos, esse atraso pode causar inconsistências na lógica de negócios.

image

Conforme ilustrado na figura, as aplicações de negócios costumam ser desacopladas por meio de uma estrutura de microsserviços. Após gravar dados, o Serviço A envia uma mensagem de sucesso de gravação ao Serviço B por uma fila de mensagens. Em um cenário de consistência de sessão, se o Serviço A ler os dados imediatamente na mesma sessão após atualizar col para 20, ele receberá o resultado mais recente (20), mesmo que a solicitação seja roteada para um nó somente leitura. No entanto, após receber a notificação da atualização, se o Serviço B ler diretamente de um nó somente leitura, ainda poderá recuperar o valor antigo (10). Essa situação pode gerar problemas de consistência de dados para a aplicação. Para garantir a consistência de leitura após gravação, as aplicações precisam encaminhar as solicitações de leitura para o nó de leitura e gravação, deixando ociosos os recursos dos nós somente leitura.

Funcionamento

O PolarDB for PostgreSQL e o oferecem capacidade de leitura com consistência forte para nós somente leitura no nível do kernel do banco de dados, assegurando que esses nós sempre vejam os dados mais recentes gravados no nó de leitura e gravação. Tal capacidade proporciona consistência forte em todo o cluster para operações de leitura. Quando a consistência global está ativada, cada transação de leitura e gravação confirmada no nó primário recebe um número de sequência de confirmação (CSN). O CSN representa a ordem de confirmação da transação e serve para construir snapshots de transação mais eficientes, substituindo a lista nativa de transações ativas do PostgreSQL. O nó de leitura e gravação registra o CSN no log de gravação antecipada (WAL), e os nós somente leitura reproduzem o WAL para construir um estado completo da transação.

As etapas a seguir descrevem o processo de execução de SQL para uma leitura com consistência forte em um nó RO:

  1. Um cliente envia uma solicitação de consulta a um nó somente leitura.

  2. O nó somente leitura obtém o CSN mais recente do nó de leitura e gravação pela rede.

  3. O nó somente leitura utiliza o CSN mais recente do nó de leitura e gravação para criar uma visualização de leitura com consistência forte e aguarda a reprodução do estado de transação até esse ponto.

  4. O nó somente leitura determina a visibilidade dos dados com base nessa visualização e retorna o resultado ao cliente.

image

Procedimento

  1. Faça login no console do PolarDB. No painel de navegação à esquerda, clique em Clusters. Selecione a região onde seu cluster está localizado e clique no ID do cluster.

  2. No painel de navegação à esquerda, escolha Settings and Management > Parameters. Defina os parâmetros polar_csn_enable e polar_global_csn_enable como on para ativar o recurso CSN de transação.

    Nota

    Essas modificações de parâmetros exigem a reinicialização do cluster para entrar em vigor. Planeje-se adequadamente. Para obter mais informações sobre como definir parâmetros de cluster no console, consulte Definir parâmetros do cluster.

  3. Na página Basic Information, na seção Database Connections, clique em Configure ao lado de Cluster Endpoint (Recommended) ou clique em Modify na caixa de diálogo exibida.

  4. Na página Edit Endpoint, defina o nível de consistência como Global Consistency (Strong) e configure os dois parâmetros relacionados:

    Parâmetro

    Descrição

    Global Consistency Timeout

    Tempo máximo, em milissegundos, que um nó somente leitura aguarda para sincronizar com o nó primário. Valores válidos: 1 a 1.000.000. Padrão: 100.

    Global Consistency Timeout Policy

    Ação a ser tomada quando ocorre timeout em um nó somente leitura. Valores válidos:

    • Send Requests to Primary Node (Default)

    • Return Error Messages Due to Timeout

    • Automatic Downgrade to Inconsistent Read Due to Timeout

Perguntas frequentes

Desativar para uma sessão

Após ativar a consistência global em um nó somente leitura, ela se aplica a todas as novas conexões por padrão. Se determinadas consultas não precisarem desse recurso, execute o comando a seguir para desativar a consistência global na sessão atual:

SET polar_scc_enable = off;

Timeout de leitura

Faça login no console do PolarDB. Clique em Configure ao lado do endpoint do cluster ou em Modify na caixa de diálogo aberta. Em seguida, modifique o Global Consistency Timeout. Se ocorrer um timeout, o cliente receberá a seguinte mensagem de erro:

SCC timeout waiting for WAL replay
Nota

Para clusters com cargas de gravação intensas ou instáveis, considere definir um valor maior para o Global Consistency Timeout.

Política de downgrade por timeout

Faça login no console do PolarDB. Clique em Configure ao lado do endpoint do cluster ou em Modify na caixa de diálogo exibida. Defina a Global Consistency Timeout Policy como Automatic Downgrade to Inconsistent Read Due to Timeout. Quando uma leitura com consistência global atingir o timeout, a operação de consulta será automaticamente rebaixada para uma leitura inconsistente, e o cliente não receberá uma mensagem de erro. Para valores válidos e mais detalhes sobre este parâmetro, consulte a descrição do parâmetro Global Consistency Timeout Policy.

Evitar latência de leitura

Acesse o console do PolarDB e defina o parâmetro synchronous_commit como on para evitar latência de leitura em cenários com baixa carga de gravação. Para obter mais informações sobre como modificar parâmetros no console, consulte Definir parâmetros do cluster.