Como monitoro uma replicação lógica no Postgresql 12 vendo o lsn?
O que eu fiz : Inspecione algumas colunas no Editor e no Assinante.
Lado do editor:
select * from pg_stat_replication;
-- veja o REPLAY_LSN
select * from pg_replication_slots;
-- veja o CONFIRMED_FLUSH_LSN
Lado do assinante:
select * from pg_catalog.pg_stat_subscription;
-- veja o RECEIVED_LSN e o LATEST_END_LSN
Certifico-me de que todos os valores são os mesmos nessas colunas.
Estou correcto ? Ou existe alguma outra maneira de ver que a replicação funciona inspecionando alguns parâmetros?
Eu usei replicação no Postgres 12.
No lado do editor, há algumas coisas que você pode verificar:
Vou criar uma publicação "test_publication" com duas tabelas:
t_1
et_2
. Não abordarei os pré-requisitos (usuário, funções e assim por diante).Do lado do assinante:
Informações interessantes estão na tabela
pg_catalog.pg_stat_subscription
. Aqui as colunas importantes são:received_lsn
: Último local de log write-ahead recebido.last_msg_send_time
: hora de envio da última mensagem recebida do editor.last_msg_receipt_time
: Hora de recebimento da última mensagem recebida do editor.latest_end_lsn
: último local de log de gravação antecipada relatado ao editor.latest_end_time
: Hora do último local de log de gravação antecipada relatado ao editor.Você tem que verificar essas colunas para pegar o que está acontecendo. Primeiro, verifique se os dois bancos de dados estão sincronizados;
Lado do editor:
Isso mostra o local no arquivo WAL onde estamos agora, antes de iniciar uma nova inserção.
Podemos verificar no assinante que neste momento os dois bancos de dados estão sincronizados, pois o valor retornado por
pg_current_wal_lsn()
no editor corresponde ao valor nas colunasreceived_lsn
elatest_end_lsn
no assinante:Adicionarei 4000 linhas à tabela
t_1
e verei o que acontece no editor:Vejamos como os
pg_catalog.pg_stat_subscription
valores mudam durante a replicação no assinante:Como você pode ver, no assinante as quatro colunas mostram como o WAL está chegando do editor e como ele é aplicado. A diferença de tempo nas colunas
last_msg_send_time
elast_msg_receipt_time
pode dar informações sobre o atraso entre o editor e o assinante. Nesse caso, os dois servidores estão em sub-redes diferentes no mesmo data center.Leve em consideração que os dois servidores que usei são servidores de teste e NÃO ESTÃO perfeitos em sincronia entre eles. (O servidor do assinante não tem um servidor NTP configurado).