PostgreSQL逻辑订阅中的复制状态查看
2020-06-28 23:14 abce 阅读(3432) 评论(0) 编辑 收藏 举报1.订阅端
pg_subscription_rel
查看订阅的每个表的复制状态。是多对多的映射。其中: srrelid:表示表的pg_class.oid srsubstate:状态码;i=初始化,d=正在复制数据,s=已同步,r =准备好(常规复制) srsublsn: s和r状态时的结束LSN。
1 2 3 4 5 6 7 8 9 | 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位置。
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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
1 2 3 4 5 6 7 8 | 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 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 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
2017-06-28 12C -- ORA-65005: missing or invalid file name pattern for file
2016-06-28 禁掉数据库中的自动统计信息收集任务
2016-06-28 11G中自动收集统计信息