Todos os produtos
Search
Central de documentação

PolarDB:Configure a custom replication key

Última atualização: Jul 07, 2026

Por padrão, o IMCI sincroniza atualizações e exclusões de dados usando a chave primária. Quando uma tabela não tem chave primária ou usa uma chave não ordenada (como UUID), a sincronização gera E/S aleatória excessiva e degrada o desempenho. Defina uma chave de replicação personalizada em uma coluna ordenada para converter E/S aleatória em E/S sequencial.

Pré-requisitos

A tabela deve ter uma coluna com valores monotonicamente crescentes no armazenamento físico.

Considerações

Observe as seguintes restrições:

  • A chave de replicação deve referenciar um índice único, especificado com a cláusula USING INDEX.

  • Todas as colunas do índice único devem ser definidas como NOT NULL.

  • Para obter melhor desempenho, crie o índice único em uma coluna monotonicamente crescente, como SERIAL ou BIGSERIAL.

Como funciona

Mecanismo REPLICA IDENTITY

A propriedade REPLICA IDENTITY controla quais valores de coluna são gravados no WAL (write-ahead log) para identificar linhas alteradas durante a replicação lógica. O IMCI usa esse mecanismo para localizar e atualizar linhas no columnar store. O REPLICA IDENTITY oferece quatro modos:

Modo

Descrição

Caso de uso

DEFAULT

Usa a chave primária como identidade de replicação.

Modo padrão e recomendado. Nenhuma alteração é necessária se a tabela tiver chave primária.

USING INDEX

Usa um índice único especificado como identidade de replicação.

Especifique um índice único ordenado para melhorar a eficiência quando a tabela não tiver chave primária ou tiver uma chave primária não ordenada.

FULL

Grava os valores de todas as colunas da linha no WAL.

Use apenas quando a tabela não tiver chave primária nem índice único, mas precisar oferecer suporte a operações UPDATE ou DELETE.

NOTHING

Não registra informações de identificação.

Use apenas para tabelas somente de inserção que não suportam atualizações ou exclusões.

Índice único ordenado como chave de replicação

O princípio central consiste em usar o modo USING INDEX para definir a chave de replicação como um índice único em uma coluna ordenada, como uma coluna de incremento automático.

Fluxo de trabalho:

  1. Crie um índice único em uma coluna fisicamente ordenada, como uma coluna de incremento automático SERIAL.

  2. Execute ALTER TABLE ... REPLICA IDENTITY USING INDEX ... para alterar a identidade de replicação da tabela para o novo índice.

  3. Durante a replicação lógica, o sistema decodifica os valores de chave ordenados do WAL.

  4. O IMCI usa esses valores de chave ordenados para localizar e atualizar dados no columnar store por meio de E/S sequencial, em vez de E/S aleatória, aumentando significativamente o desempenho da sincronização.

Procedimento

  • Etapa 1: Crie um índice único

    Crie um índice único na coluna ordenada de incremento automático.

    -- Assuming table t has an auto-incrementing column named serial_id
    CREATE UNIQUE INDEX idx_t_serial_id ON t(serial_id);
  • Etapa 2: Alterar a identidade de replicação

    Altere o REPLICA IDENTITY da tabela para o índice único criado na etapa anterior.

    ALTER TABLE t REPLICA IDENTITY USING INDEX idx_t_serial_id;
  • Etapa 3: Crie ou recrie o índice do columnar store

    Verifique se o índice do columnar store (CSI) inclui a coluna da chave de replicação. Se já existir um CSI, recrie-o para garantir o desempenho ideal.

    -- Create a columnar store index that includes all columns
    CREATE INDEX ON t USING csi;
  • Etapa 4: Comparar o desempenho

    O experimento a seguir demonstra a melhoria de desempenho obtida.

    • Configuração do teste:

      1. Crie uma tabela com uma chave primária não ordenada (random_id) e uma coluna ordenada de incremento automático (serial_id).

        create table t (random_id text primary key, serial_id serial, a text);
      2. Insira 10 milhões de linhas de dados.

        insert into t(random_id, a)
          select md5(i::text), i::text
            from generate_series(1, 10000000) i;
      3. Crie um índice do columnar store e um índice único ordenado, idx_a, na coluna serial_id.

        create unique index idx_a on t(serial_id);
        create index on t using csi;
    • Procedimento de teste:

      1. Teste no modo padrão (usando a chave primária não ordenada random_id como chave de replicação):

        -- Update 10,000 rows
        UPDATE t SET a = '0' WHERE serial_id <= 10000;
      2. Teste no modo personalizado (alterando a chave de replicação para o índice único ordenado idx_a):

        ALTER TABLE t REPLICA IDENTITY USING INDEX idx_a;
        -- Update another 10,000 rows
        UPDATE t SET a = '1' WHERE serial_id <= 10000;
    • Resultados do teste:

      Tipo de chave de replicação

      Padrão (chave primária não ordenada)

      Personalizado (índice único ordenado)

      Tempo de sincronização (10.000 linhas)

      ~0,5 segundos

      ~0,01 segundos

Conclusão

A melhoria de aproximadamente 50 vezes demonstra que uma chave de replicação personalizada ordenada é fundamental para sincronizar dados eficientemente no IMCI.