zoukankan      html  css  js  c++  java
  • PostgreSQL逻辑订阅中的复制状态查看

    1.订阅端

    pg_subscription_rel

    查看订阅的每个表的复制状态。是多对多的映射。其中: srrelid:表示表的pg_class.oid srsubstate:状态码;i=初始化,d=正在复制数据,s=已同步,r =准备好(常规复制) srsublsn: s和r状态时的结束LSN。

    mytdb=# select * from pg_subscription_rel;
     srsubid | srrelid | srsubstate |   srsublsn   
    ---------+---------+------------+--------------
     5740670 | 5725376 | r          | EB/EFFFF900
     5740670 | 5725388 | r          | EC/114B1FF8
     5740670 | 7436654 | r          | 10F/54BCE3A8
    (3 rows)
    
    mytdb=#
    

    初始时表处于i状态,而后PG从发布端copy基表,此时该表处于d状态,基表拷贝完成后记录LSN位置到srsublsn。之后进入s状态最后再进入r状态,并通过pgoutput逻辑解码从发布端拉取并应用增量数据。

    pg_stat_subscription

    pg_stat_subscription显示每个订阅worker的状态。一个订阅包含一个apply worker,可选的还有一个或多个进行初始同步的sync worker。 sync worker上的relid指示正在初始同步的表;如果apply worker没有运行,relid为NULL。apply worker的latest_end_lsn为已反馈给发布端的LSN位置,一定程度上也可以认为是已完成同步的LSN位置。

    mytdb=# select * from pg_stat_subscription;
    -[ RECORD 1 ]---------+------------------------------
    subid                 | 5740670
    subname               | bpm_sub
    pid                   | 29725
    relid                 | 
    received_lsn          | 12E/E32798F0
    last_msg_send_time    | 2020-06-28 22:34:33.15169+08
    last_msg_receipt_time | 2020-06-28 22:34:33.151752+08
    latest_end_lsn        | 12E/E32798F0
    latest_end_time       | 2020-06-28 22:34:33.15169+08
    
    mytdb=# 

    pg_replication_origin_status

    mytdb=# select * from pg_replication_origin_status;
    -[ RECORD 1 ]-------------
    local_id    | 1
    external_id | pg_5740670
    remote_lsn  | 12E/E3264728
    local_lsn   | 12E/E326E640
    
    mytdb=# 
    

    上面的remote_lsn是订阅端应用的最后一个的WAL记录在源节点的开始LSN位置)。

    2.发布端

    pg_replication_slots

    mytdb=# select * from pg_replication_slots;
    -[ RECORD 1 ]-------+----------------
    slot_name           | publication_bpm
    plugin              | pgoutput
    slot_type           | logical
    datoid              | 16386
    database            | mybpm
    temporary           | f
    active              | t
    active_pid          | 29726
    xmin                | 
    catalog_xmin        | 903856775
    restart_lsn         | 12E/E33F50A8
    confirmed_flush_lsn | 12E/E349E740
    
    mytdb=# 
    

    temporary:如果是临时复制槽,为t;临时复制槽不会被保存到磁盘,在会话结束后就会被自动删除 restart_lsn:是可能仍被这个槽的消费者要求的最旧WAL地址(LSN),并且因此不会在检查点期间自动被移除。 confirmed_flush_lsn:代表逻辑槽的消费者已经确认接收数据到什么位置的地址(LSN)。比这个地址更旧的数据已经不再可用。

    confirmed_flush_lsn是最后一个已同步的WAL记录的结束位置(需要字节对齐,实际是下条WAL的起始位置);restart_lsn有时候是最后一个已同步的WAL记录的起始位置。

    对应订阅范围内的表的更新WAL记录,必须订阅端执行完这条记录才能算已同步;对其他无关的WAL,直接认为是已同步的,继续处理下一条WAL。

    pg_stat_replication

    mybpm=# select * from pg_stat_replication;
    -[ RECORD 1 ]----+------------------------------
    pid              | 29726
    usesysid         | 5673207
    usename          | pgrep
    application_name | bpm_sub
    client_addr      | 11.11.11.111
    client_hostname  | 
    client_port      | 30428
    backend_start    | 2020-06-17 13:15:31.117407+08
    backend_xmin     | 
    state            | streaming
    sent_lsn         | 12E/EB57BD78
    write_lsn        | 12E/EB579E98
    flush_lsn        | 12E/EB579E98
    replay_lsn       | 12E/EB579E98
    write_lag        | 00:00:00.000427
    flush_lag        | 00:00:00.201962
    replay_lag       | 00:00:00.000427
    sync_priority    | 0
    sync_state       | async
  • 相关阅读:
    岩石圈
    地球及其圈层结构
    如何请教一个技术问题
    中国游戏路在何方?
    5.4删除二叉搜索树的任意元素
    5.3 删除二叉搜索树的最大元素和最小元素
    uni-app开发小程序准备阶段
    5.2二叉搜索树遍历(前序、中序、后序、层次、广度优先遍历)
    5.1二叉搜索树基础
    【loj
  • 原文地址:https://www.cnblogs.com/abclife/p/13205609.html
Copyright © 2011-2022 走看看