$ primary=$(du -s /var/lib/postgresql/14/main/base | awk '{print $1}')
$ replica=4648394012 # same command as above only from replica
$ echo ${replica}/${primary}*100 | bc -l
34.90793993287965597200
FATAL: the database system is not yet accepting connections
DETAIL: Consistent recovery state has not been yet reached.
LOG: restored log file "000000020004022E00000029" from archive
4条答案
按热度按时间4smxwvx51#
我通常使用以下SQL查询来检查Postgres v11的状态。
在master上:
字符串
副本上(我是流复制):
型
qmb5sa222#
在主服务器上,pg_stat_replication提供有关正在进行的复制的数据:
字符串
在postgresql v10上:
型
hs1ihplo3#
在PostgreSQL中显示复制状态
在服务器上
字符串
客户端
型
cx6n0qe34#
执行完整数据库复制时,有多个阶段:
***A)**完全备份-
pg_basebackup
将数据库从主服务器克隆到备用服务器(备用服务器未运行)***B)**恢复-备用服务器启动(尚未接受连接)
***C)**WAL流-主设备和备用设备都处于一致状态并接受连接
A)完全备份
Since PostgreSQL 13您可以使用
pg_stat_progress_basebackup
表,在其中可以获取每个复制阶段的进度(从主复制阶段):字符串
复制过程有多个阶段,每个阶段都报告进度:
initializing
个starting file transfer
个streaming database files
个finishing file transfer
个transferring WAL
个在早期的PostgreSQL版本中,你只剩下普通的磁盘使用:
型
pg_stat_replication
给你例如replay_lag
,这对整体进度没有多大帮助。你只能估计你实际上需要保留多少WAL。型
B)回收率
备用服务器已经完成了第一阶段,假设服务器能够启动(关键参数的正确配置)。现在
postgres
进程必须在备用服务器上重放累积的WAL或从存档中复制它们(例如使用archive_command
),以达到一致的恢复状态。您可以使用pg_controldata
获得LSN:型
注意:在此阶段,主服务器上的
pg_stat_replication
表中没有记录。你会在日志中注意到类似这样的内容:
型
十六进制数指向一个WAL文件,可以转储(通常单行就足够了)
型
我们正在寻找LSN部分,例如
lsn: 40234/F4001C08
。现在,当我们回到主服务器时,我们可以获得文件大小单位的滞后:型
1813 GB
是当前WAL和正在重放的WAL之间的差异。另一种选择是使用
pg_controldata
型
在这里,您可以获得以下LSN指针:
Backup start location
个Latest checkpoint's REDO location
-当前恢复位置Minimum recovery ending location
个C)WAL流
主服务器和备用服务器几乎处于相同的状态,两台服务器都在接受连接。除了这两台服务器之间可能存在一些延迟,这可能是由写入WAL的频率,网络传输速度等引起的。
待命状态:
型
在主要方面:
型
这将给予您两个服务器之间的时间差。