Embora compreenda o processo de replicação lógica, uma coisa ainda não está clara para mim.
Quando o processo de decodificação será iniciado?
O que entendi é: digamos que eu tenha uma publicação e um slot. Mas sem assinantes. Nesse caso, os slots manterão apenas as informações do wal necessárias para a sincronização, mas os dados reais do wal não serão decodificados até que um assinante seja iniciado.
Depois que o assinante for ativado, o slot informará de qual wal lsn e o processamento de decodificação real será iniciado.
Por favor, corrija se a afirmação estiver errada.
Analisei-o com uma pequena configuração. O processo de decodificação será iniciado após os consumidores conectados e o estado estiver ativo.
Para reproduzir isso, apenas desativei a assinatura e comecei a inserir alguns dados em massa aleatórios. Depois de alguns minutos, habilitou a assinatura.
Você pode ver o consumo de CPU e o consumo de IOPS depois de habilitar a assinatura.
Na decodificação lógica, um slot de replicação determina o plug-in de decodificação lógica, um número de sequência de log de reinicialização (LSN) e os IDs de transação mÃnimos necessários para a decodificação. Estes correspondem à s colunas
plugin
,restart_lsn
,xmin
ecatalog_xmin
empg_replication_slots
.O próprio slot de replicação não faz nada e não armazena nada além desses dados. É um marcador que diz ao PostgreSQL para não descartar nenhum WAL que seja mais recente que
restart_lsn
e para nãoVACUUM
descartar nenhum dado mais recente quexmin
ecatalog_xmin
.A decodificação só acontece quando uma conexão de replicação é estabelecida e o standby envia o comando de replicação .
START_REPLICATION SLOT slot_name LOGICAL
Então sim, você está correto. Enquanto é o standby que determina de onde replicar na replicação fÃsica por streaming, no caso da replicação lógica o ponto de partida é determinado pelo slot de replicação.