检查postgres复制状态

Din*_*iel 11 postgresql database-replication

有人可以建议检查pgsql复制状态的步骤,以及何时说复制没有正确进行?

我们使用pgsql9.0和pgsql9.4进行流复制

谢谢.

Rei*_*ain 9

在主服务器上,pg_stat_replication提供有关正在进行的复制的数据:

select client_addr, state, sent_location, write_location,
        flush_location, replay_location from pg_stat_replication;
Run Code Online (Sandbox Code Playgroud)

在postgresql v10上:

select client_addr, state, sent_lsn, write_lsn,
    flush_lsn, replay_lsn from pg_stat_replication;
Run Code Online (Sandbox Code Playgroud)

  • 好的,如果上面的查询返回 0 行,那有什么问题呢? (3认同)

tru*_*uth 7

在PostgreSQL中显示复制状态

在服务器上

postgres=# select usename,application_name,client_addr,backend_start,state,sync_state from pg_stat_replication ;

usename   | application_name |  client_addr   |         backend_start         |   state   | sync_state 
------------+------------------+----------------+-------------------------------+-----------+------------
replicator | walreceiver      | 192.168.10.132 | 2018-07-06 06:12:20.786918+03 | streaming | async
(1 row)
Run Code Online (Sandbox Code Playgroud)

在客户端上

postgres=# select pg_is_in_recovery();
 pg_is_in_recovery 
-------------------
 t
 (1 row)


postgres=# select pg_last_xlog_receive_location();
 pg_last_xlog_receive_location 
-------------------------------
 0/540C1DB8


postgres=# select pg_last_xlog_replay_location();
 pg_last_xlog_replay_location 
------------------------------
 0/540C1DB8
 (1 row)

postgres=#    SELECT CASE WHEN pg_last_xlog_receive_location() = pg_last_xlog_replay_location()
                  THEN 0
                ELSE EXTRACT (EPOCH FROM now() - pg_last_xact_replay_timestamp())
              END AS log_delay;
 log_delay 
-----------
 0
 (1 row)
Run Code Online (Sandbox Code Playgroud)

  • 在postgres 10上,这不能完全正常工作,但是`SELECT pg_last_xact_replay_timestamp();`提供了有用的信息! (3认同)
  • 在单个查询中比较主从状态:`select pg_last_xlog_receive_location(), pg_last_xlog_replay_location(), pg_last_xact_replay_timestamp(), CASE WHEN pg_last_xlog_receive_location() = pg_last_xlog_replay_location() THEN 0 ELSE EXTRACT(EPOCH FROM now() - pg_last_xact_ replay_timestamp()) END AS日志延迟;` (2认同)

Ale*_*xey 7

我通常使用以下SQL查询来检查Postgres v11的状态。

在母版上:

select * from pg_stat_replication;
Run Code Online (Sandbox Code Playgroud)

在副本上(在我的情况下为流复制):

select * from pg_stat_wal_receiver;
Run Code Online (Sandbox Code Playgroud)

  • 对于垂直输出,请将“;”替换为“\x\g\x”。 (11认同)
  • 您能否解释一下,如果一切顺利或出现问题,我们应该看到什么?sync_state:在主服务器上同步是一个好兆头吗? (4认同)