• 【PostgreSQL】PostgreSQL复制的监控


    创建物理复制槽:(在master端执行)

    postgres=# select pg_create_physical_replication_slot('abce');
    

      

    删除复制槽:

    postgres=# select pg_drop_replication_slot('abce');
    

      

    1.主库端

    (1)查看复制连接的状态

    pg_stat_replication

    =# select * from pg_stat_replication;
    -[ RECORD 1 ]----+------------------------------
    pid             | 2327
    usesysid         | 10
    usename         | mdevan
    application_name | walreceiver
    client_addr     |
    client_hostname |
    client_port     | -1
    backend_start   | 2022-06-02 06:04:48.536888-04
    backend_xmin     |
    state           | streaming
    sent_lsn         | 0/277628F8
    write_lsn       | 0/277628F8
    flush_lsn       | 0/277628F8
    replay_lsn       | 0/277628F8
    write_lag       | 00:00:00.000049
    flush_lag       | 00:00:00.00063
    replay_lag       | 00:00:00.000662
    sync_priority   | 0
    sync_state       | async
    -[ RECORD 2 ]----+------------------------------
    pid             | 2085
    usesysid         | 10
    usename         | mdevan
    application_name | walreceiver
    client_addr     |
    client_hostname |
    client_port     | -1
    backend_start   | 2022-06-02 04:35:36.559838-04
    backend_xmin     |
    state           | streaming
    sent_lsn         | 0/277628F8
    write_lsn       | 0/277628F8
    flush_lsn       | 0/277628F8
    replay_lsn       | 0/277628F8
    write_lag       |
    flush_lag       |
    replay_lag       |
    sync_priority   | 0
    sync_state       | async

    (2)查看复制槽的状态

    pg_replication_slots;

    =# select * from pg_replication_slots;
    -[ RECORD 1 ]-------+--------------
    slot_name           | mylogslot
    plugin             | test_decoding
    slot_type           | logical
    datoid             | 16384
    database           | bench
    temporary           | f
    active             | t
    active_pid         | 2607
    xmin               |
    catalog_xmin       | 356948
    restart_lsn         | 0/3B44A5A0
    confirmed_flush_lsn | 0/3B44A5A0
    -[ RECORD 2 ]-------+--------------
    slot_name           | myreplslot1
    plugin             |
    slot_type           | physical
    datoid             |
    database           |
    temporary           | f
    active             | t
    active_pid         | 2598
    xmin               |
    catalog_xmin       |
    restart_lsn         | 0/3B44A5D8
    confirmed_flush_lsn |

    2.从库端

    (1)日志接收的状态

    pg_stat_wal_receiver

    =# select * from pg_stat_wal_receiver;
    -[ RECORD 1 ]---------+------------------------------
    pid                   | 2084
    status               | streaming
    receive_start_lsn     | 0/3000000
    receive_start_tli     | 1
    received_lsn         | 0/11233E20
    received_tli         | 1
    last_msg_send_time   | 2022-06-02 04:47:53.334477-04
    last_msg_receipt_time | 2022-06-02 04:47:53.334519-04
    latest_end_lsn       | 0/11233E20
    latest_end_time       | 2022-06-02 04:46:53.261754-04
    slot_name             |
    conninfo             | [removed for brevity]

    last_msg_receipt_time - last_msg_send_time 表示复制wal接收的延迟;这里slot_name的值为空,表示没有使用复制槽。

    这个就是使用复制槽的例子:

    =# select * from pg_stat_wal_receiver;
    -[ RECORD 1 ]---------+------------------------------
    pid                   | 2326
    status               | streaming
    receive_start_lsn     | 0/15000000
    receive_start_tli     | 1
    received_lsn         | 0/15000060
    received_tli         | 1
    last_msg_send_time   | 2022-06-02 06:04:48.537842-04
    last_msg_receipt_time | 2022-06-02 06:04:48.537887-04
    latest_end_lsn       | 0/15000060
    latest_end_time       | 2022-06-02 06:04:48.537842-04
    slot_name             | myreplslot1
    conninfo             | [removed for brevity]

    (2)日志应用状态

    pg_last_wal_receive_lsn(), pg_last_wal_replay_lsn()查看从库日志应用的状态

    =# select pg_last_wal_receive_lsn(), pg_last_wal_replay_lsn(), pg_last_xact_replay_timestamp();
    -[ RECORD 1 ]-----------------+------------------------------
    pg_last_wal_receive_lsn       | 0/1A000000
    pg_last_wal_replay_lsn       | 0/19FFE928
    pg_last_xact_replay_timestamp | 2022-06-02 06:13:42.141768-04

    pg_last_wal_replay_lsn - pg_last_wal_receive_lsn 表示日志应用的延迟。

     

    推荐使用工具pgmetrics查看

     

    其它

    #主库端执行

    select pid,
          application_name,
          pg_wal_lsn_diff(pg_current_wal_lsn(), sent_lsn) sending_lag,
          pg_wal_lsn_diff(sent_lsn, flush_lsn) receiving_lag,
          pg_wal_lsn_diff(flush_lsn, replay_lsn) replaying_lag,
          pg_wal_lsn_diff(pg_current_wal_lsn(), replay_lsn) total_lag
    from pg_stat_replication;

    #从库端执行

    SELECT CASE
            WHEN pg_last_wal_receive_lsn() = pg_last_wal_replay_lsn() THEN
            0
            ELSE
            EXTRACT(EPOCH FROM now() - pg_last_xact_replay_timestamp())
          END AS log_delay,
          pg_last_wal_receive_lsn(),
          pg_last_wal_replay_lsn(),
          pg_last_xact_replay_timestamp();
     
  • 相关阅读:
    Cypress安装使用(E2E测试框架)
    AirtestIDE详解(跨平台的UI自动化编辑器)
    Linux之自动化部署
    工作笔记 之 Python应用技术
    工作笔记 之 Linux服务搭建
    工作笔记 之 互联网实用技术
    Git全面应用
    Python-Thread(通俗易懂)
    php笔记(二)PHP类和对象之Static静态关键字
    php笔记(一)面向对象编程
  • 原文地址:https://www.cnblogs.com/abclife/p/16391659.html
Copyright © 2020-2023  润新知