PG中的备库会同步主库修改过的参数吗
Tags: PGPostgreSQL主备环境参数同步
1前言
今天偶然操作发现alter system修改参数,reload备库不会跟着应用,调用的操作系统写auto.conf文件。但是这应该算是个ddl,这个要怎么理解呢?
这个是不是跟pg_setting里边的signal,superuser,postmaster有关
其实这个问题涉及到了不少原理,值得写出来分享一下。
2何如
这个问题不难理解,理解流复制的原理就能知晓
High availability and scalable reads in PostgreSQL
通俗一点来说就是主库不断产生 WAL 并且持续发送给备库,备库收到了再进行回放。因此,这个问题就转变成了主库修改参数是否会记录 WAL record。
那让我们试验一下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | postgres=# alter system set deadlock_timeout to '5s'; ALTER SYSTEM postgres=# select pg_reload_conf(); pg_reload_conf ---------------- t (1 row) postgres=# select pg_walfile_name(pg_current_wal_lsn()); pg_walfile_name -------------------------- 0000000100000000000000C5 (1 row) postgres=# create table t2(id int); CREATE TABLE |
pg_waldump 解析一下
1 2 3 4 5 | [postgres@xiongcc pg_wal]$ pg_waldump 0000000100000000000000C5 rmgr: Standby len (rec/tot): 50/ 50, tx: 0, lsn: 0/C5000028, prev 0/C401CBA8, desc: RUNNING_XACTS nextXid 53284 latestCompletedXid 53283 oldestRunningXid 53284 rmgr: Storage len (rec/tot): 42/ 42, tx: 0, lsn: 0/C5000060, prev 0/C5000028, desc: CREATE base/24927/25043 rmgr: Heap2 len (rec/tot): 60/ 60, tx: 53284, lsn: 0/C5000090, prev 0/C5000060, desc: NEW_CID rel 1663/24927/1247; tid 15/17; cmin: 0, cmax: 4294967295, combo: 4294967295 ... |
可以看到,确实没有相关的 WAL record。因此,备库不会复制也就是"理所应当"了。但是是否所有的参数都不会记录呢?其实不然,让我们瞅瞅代码: