AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 314324
Accepted
padjee
padjee
Asked: 2022-07-13 06:37:31 +0800 CST2022-07-13 06:37:31 +0800 CST 2022-07-13 06:37:31 +0800 CST

Monitore a replicação lógica usando LSN

  • 772

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?

postgresql replication
  • 1 1 respostas
  • 204 Views

1 respostas

  • Voted
  1. Best Answer
    Saeed Bahmanabadi
    2022-07-13T07:45:37+08:002022-07-13T07:45:37+08:00

    Eu usei replicação no Postgres 12.

    No lado do editor, há algumas coisas que você pode verificar:

    pg_catalog.pg_publication;
    pg_catalog.pg_publication_tables;
    pg_current_wal_lsn();
    

    Vou criar uma publicação "test_publication" com duas tabelas: t_1e t_2. Não abordarei os pré-requisitos (usuário, funções e assim por diante).

    test_logical_replication=# create publication test_publication for table t_1, t_2;  
    CREATE PUBLICATION  
    test_logical_replication=# select * from pg_catalog.pg_publication;  
    pubname      | pubowner | puballtables | pubinsert | pubupdate | pubdelete  
    -----------------+----------+--------------+-----------+-----------+-----------  
    test_publication |       10 | f            | t         | t         | t  
    (1 row) 
    
    test_logical_replication=# select * from pg_publication_tables;    
        pubname      | schemaname | tablename  
        ------------------+------------+-----------  
         test_publication | public     | t_1  
         test_publication | public     | t_2  
        (2 rows)  
    

    Do lado do assinante:

    test_logical_replication_subscriber=# create subscription test_subscription CONNECTION 'dbname=test_logical_replication host=XXX user=repuser' PUBLICATION test_publication;  
    NOTICE:  created replication slot "test_subscription" on publisher   
    CREATE SUBSCRIPTION 
    

    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:

    test_logical_replication=> select pg_current_wal_lsn();  
     pg_current_wal_lsn  
    --------------------  
     0/8EB83768     
    

    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 colunas received_lsne latest_end_lsnno assinante:

    test_logical_replication_subscriber=# select received_lsn, latest_end_lsn from pg_catalog.pg_stat_subscription;  
    
    received_lsn    | latest_end_lsn  
    ----------------+------------------     
     0/8EB83768     | 0/8EB83768        
    

    Adicionarei 4000 linhas à tabela t_1e verei o que acontece no editor:

    test_logical_replication=> insert into t_1 select id+1, txt||'--BB' from t_1;  
    INSERT 0 4000  
    
    
    test_logical_replication=> select pg_current_wal_lsn();  
     pg_current_wal_lsn
    --------------------
     0/8EC4B9D0             <<< this value in increasing
    (1 row)
    
    test_logical_replication=> select pg_current_wal_lsn();
     pg_current_wal_lsn
    --------------------
     0/8EC4DE78             <<< this value in increasing
    (1 row)
    
    test_logical_replication=> select pg_current_wal_lsn();
     pg_current_wal_lsn
    --------------------
     0/8EC4DEB0             <<< this value in increasing
    (1 row) 
    
    test_logical_replication=> select pg_current_wal_lsn();
     pg_current_wal_lsn
    --------------------
     0/8EC4DEB0            <<< same value, WAL sending has finished
    (1 row)
    

    Vejamos como os pg_catalog.pg_stat_subscriptionvalores mudam durante a replicação no assinante:

    test_logical_replication_subscriber=# select received_lsn,last_msg_send_time,last_msg_receipt_time,latest_end_lsn,latest_end_time from pg_catalog.pg_stat_subscription;
     received_lsn |      last_msg_send_time       |    last_msg_receipt_time     | latest_end_lsn |        latest_end_time  
    --------------+-------------------------------+------------------------------+----------------+-------------------------------
     0/8EC4B9D0   | 2018-12-17 11:39:56.014564+01 | 2018-12-17 11:39:56.07322+01 | 0/8EC4B9D0     | 2018-12-17 11:39:56.014564+01
    (1 row)  
    
    test_logical_replication_subscriber=# select received_lsn,last_msg_send_time,last_msg_receipt_time,latest_end_lsn,latest_end_time from pg_catalog.pg_stat_subscription;
     received_lsn |      last_msg_send_time       |     last_msg_receipt_time     | latest_end_lsn |        latest_end_time
    --------------+-------------------------------+-------------------------------+----------------+-------------------------------
     0/8EC4BA08   | 2018-12-17 11:39:56.737101+01 | 2018-12-17 11:39:56.736303+01 | 0/8EC4BA08     | 2018-12-17 11:39:56.737101+01  
    (1 row)  
    
    test_logical_replication_subscriber=# select received_lsn,last_msg_send_time,last_msg_receipt_time,latest_end_lsn,latest_end_time from pg_catalog.pg_stat_subscription;
     received_lsn |      last_msg_send_time       |     last_msg_receipt_time     | latest_end_lsn |        latest_end_time
    --------------+-------------------------------+-------------------------------+----------------+-------------------------------
     0/8EC4DE78   | 2018-12-17 11:40:04.184765+01 | 2018-12-17 11:40:04.183937+01 | 0/8EC4DE78     | 2018-12-17 11:40:04.184765+01
    (1 row)  
    
     test_logical_replication_subscriber=# select received_lsn,last_msg_send_time,last_msg_receipt_time,latest_end_lsn,latest_end_time from pg_catalog.pg_stat_subscription;
     received_lsn |      last_msg_send_time       |   last_msg_receipt_time    | latest_end_lsn |        latest_end_time
    --------------+-------------------------------+----------------------------+----------------+-------------------------------
     0/8EC4DEB0   | 2018-12-17 11:40:17.153797+01 | 2018-12-17 11:40:17.153+01 | 0/8EC4DEB0     | 2018-12-17 11:40:17.153797+01
    (1 row)
    

    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_timee last_msg_receipt_timepode 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).

    • 2

relate perguntas

  • Práticas recomendadas para executar a replicação atrasada do deslocamento de tempo

  • Os procedimentos armazenados impedem a injeção de SQL?

  • Sequências Biológicas do UniProt no PostgreSQL

  • Qual é a diferença entre a replicação do PostgreSQL 9.0 e o Slony-I?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve