Capítulo 50. Acompanhamento do progresso da replicação

As origens de replicação destinam-se a facilitar a implementação de soluções de replicação lógica sobre Decodificação lógica, fornecendo solução para dois problemas comuns:

As origens de replicação têm apenas duas propriedades, um nome e um OID. O nome, que deve ser usado para se referir à origem nos sistemas, é texto (text) de formato livre. Deve ser usado para tornar improváveis os conflitos entre as origens de replicação criadas por diferentes soluções de replicação; por exemplo, prefixando o nome da solução de replicação ao texto. O OID é usado apenas para evitar ter que armazenar a versão longa em situações onde a economia de espaço é importante. Nunca devendo ser compartilhado entre sistemas.

As origens de replicação podem ser criadas usando a função pg_replication_origin_create; removidas usando a função pg_replication_origin_drop; e vistas no catálogo do sistema pg_replication_origin.

Uma parte não trivial da construção de uma solução de replicação é acompanhar o progresso da replicação de maneira segura. Quando o processo replicador, ou todo a instância, morre, deve ser possível descobrir até onde os dados foram replicados com sucesso. Soluções ingênuas para isso, como atualizar uma linha em uma tabela para cada transação replicada, têm problemas como sobrecarga de tempo de execução e fragmentação do banco de dados.

Usando a infra-estrutura da origem de replicação, uma sessão pode ser marcada como sendo replicada a partir de um nó remoto (usando a função pg_replication_origin_session_setup). Além disso, o LSN e o registro de data e hora da efetivação de cada transação de origem podem ser configurados por transação usando a função pg_replication_origin_xact_setup. Se isso for feito, o progresso da replicação persistirá de maneira segura contra falhas. O progresso da replicação para todas as origens de replicação pode ser visto na visão pg_replication_origin_status. O progresso de uma origem específica, por exemplo, ao retomar a replicação, pode ser obtido usando a função pg_replication_origin_progress para todas as origens, ou a função pg_replication_origin_session_progress para a origem configurada na sessão corrente.

Em topologias de replicação mais complexas do que a replicação de exatamente um sistema para outro sistema, outro problema pode ser a dificuldade de evitar a replicação de linhas repetidas novamente. Isso pode levar a ciclos na replicação e ineficiências. As origens de replicação fornecem um mecanismo opcional para reconhecer e evitar isso. Quando configurado usando as funções mencionadas no parágrafo anterior, cada alteração e transação passada para os retornos de chamada (callbacks) do plug-in de saída (veja Plugins de saída de decodificação lógica) geradas pela sessão, são marcadas com a origem de replicação da sessão geradora. Isso permite tratá-las de maneira diferente no plug-in de saída, por exemplo, ignorando todas as linhas, exceto as de origem local. Além disso, o retorno de chamada de Retorno de chamada do filtro pela origem pode ser usado para filtrar o fluxo de mudança de decodificação lógica com base na fonte. Embora menos flexível, a filtragem por meio desse retorno de chamada é consideravelmente mais eficiente do que fazê-lo no plug-in de saída.

Contato

CSS válido!