postgresql 流复制相关参数及影响

news/2025/2/19 10:32:49/

修改流复制相关的参数,测试影响

wal_level

wal日志级别,这个参数决定了有多少信息写入wal日志,默认是replica。(TDSQL-PG 默认是
logical

  • minimal:除了实例crash恢复需要的记录,其他不记录,比如CREATE TABLE AS,CREATE INDEX,CLUSTER,COPY可以跳过,该模式记录的日志信息不足以支持wal归档和流复制。
  • replica: 这种模式支持复制和wal归档,同时支持备库只读查询。replica:在9.6之前还有archive和
  • hot_standby模式,映射到现在的replica模式。
  • logic:在replica的基础上增加一些信息以支持逻辑解码,该模式会增大wal日志的数量,尤其是大量的update,delete操作的库。

日志写入量为logical>replica>minimal,主备复制配置为replica,逻辑复制配置成logical

实验:将wal_level设置为minimal,观察影响

关闭备机、主机
[pg@localhost data]$ pg_ctl -D /data/db2/ stop
waiting for server to shut down.... done
server stopped[pg@localhost data]$ pg_ctl -D /data/db1/ stop
waiting for server to shut down.... done
server stopped修改主机wal_level为minimal
[pg@localhost ~]$ vi /data/db1/postgresql.conf
-----------------------------------------
wal_level = minimal
-----------------------------------------[pg@localhost ~]$ pg_ctl -D /data/db1/ -l /data/db1/server.log start
waiting for server to start.... stopped waiting
pg_ctl: could not start server
Examine the log output.查看启动日志
[pg@localhost ~]$ less /data/db1/server.log
-----------------------------------------
2024-01-10 11:25:50.540 CST [3279] LOG:  database system is shut down
2024-01-10 11:41:17.541 CST [4304] LOG:  listening on IPv6 address "::1", port 15431
2024-01-10 11:41:17.541 CST [4304] LOG:  listening on IPv4 address "127.0.0.1", port 15431
2024-01-10 11:41:17.552 CST [4304] LOG:  listening on Unix socket "/tmp/.s.PGSQL.15431"
2024-01-10 11:41:17.562 CST [4304] LOG:  redirecting log output to logging collector process
2024-01-10 11:41:17.562 CST [4304] HINT:  Future log output will appear in directory "log".
2024-01-10 13:40:44.113 CST [10943] FATAL:  WAL streaming (max_wal_senders > 0) requires wal_level "replica" or "logical"

结论:wal_level设置为minimal不支持流复制

synchronous_standby_names

这个参数用来指定同步备机的列表,存放的是需要设置为同步备机的备机名称。synchronous_commit 不为off和local 的时候有效。

参数值有下面几种表达方式:

  • synchronous_standby_names=‘s1,s2’ 代表s1或s2备机任一返回就可以提交,同ANY 1(s1,s2)。
  • synchronous_standby_names=‘FIRST 2 (s1,s2,s3)’ 代表s1,s2,s3三个备机中前两个s1和s2返
    回主库就可以提交。
  • synchronous_standby_names=‘ANY 2 (s1,s2,s3)’ 代表s1,s2,s3三个备机中任意两个备机返回主库就可以提交,基于quorum协议。
  • synchronous_standby_names=’*’ *代表匹配任意主机,也就是任意主机返回就可以提交。

s1,s2,s3代表备机的application_name,在备机recovery.conf的primary_conninfo参数中配置:
primary_conninfo = ‘host=localhost port=15431 application_name=s1’

实验:调整 synchronous_commit 及synchronous_standby_names观察影响
初始条件:主从同步正常

设置备库1的 application_name
[pg@localhost ~]$ vi /data/db2/postgresql.conf
---------------------------------------
primary_conninfo = 'host=localhost port=15431 application_name=s1'
---------------------------------------重截备机配置
[pg@localhost ~]$ pg_ctl -D /data/db2/ reload
修改主库配置
[pg@localhost ~]$ vi /data/db1/postgresql.conf
---------------------------------------
synchronous_commit = on
synchronous_standby_names = 's1,s2'  #添加一个不存在的备库 s2
---------------------------------------
重载主库配置
[pg@localhost ~]$ pg_ctl -D /data/db1/ reload

根据上面的操作修改数据库参数并,并在主库进行dll和dml操作得到如下结果:

参数影响
synchronous_commit = off
synchronous_standby_names = ‘s1,s2’
同步正常
synchronous_commit = local
synchronous_standby_names = ‘s1,s2’
同步正常
synchronous_commit = on
synchronous_standby_names = ‘s1,s2’
同步正常
synchronous_commit = on
synchronous_standby_names = ‘ANY 2 (s1,s2)’
s2备库不存在,DLL,DML语句hang住。
ctrl+c 强制退出后执行成功,s1同步正常
synchronous_commit = remote_write
synchronous_standby_names = ‘ANY 2 (s1,s2)’
s2备库不存在,DLL,DML语句hang住。
ctrl+c 强制退出后执行成功,s1同步正常

其他参数

没有测试条件,先记录一下。

wal_keep_segments

设置“pg_wal”目录下保留事务日志文件的最小数目用于流复制,如果备机停机时间过长导致主库
xlog被删除,那么主备关系会失败,但是如果开启了归档,备机可以从归档日志中继续恢复。

max_wal_size (integer)

在自动WAL检查点使得WAL增长到最大尺寸。
这是软限制;特殊情况下WAL大小可以超过 max_wal_size,如重负载下,错误archive_command,或者 较大wal_keep_segments的设置。缺省是1GB。 增加这个参数会延长崩溃恢复所需要的时间。
这个参数只能在postgresql.conf文件或者服务器命令行上设置。

min_wal_size (integer)

只要WAL磁盘使用率低于这个设置,旧的WAL文件总数被回收,以供将来检查点使用。
而不是删除。 这可以用来确保预留足够的WAL空间处理WAL使用中的峰值,比如当运行大批量工作时。 缺省是80MB。这个参数只能在postgresql.conf文件或者 服务器命令行上设置。


http://www.ppmy.cn/news/1300934.html

相关文章

Js使用ffmpeg在视频中合成音频背景音乐

Js使用ffmpeg在视频中合成音频背景音乐 ffmpeg 使用场景是需要在web端对视频的背景音乐进行混音合成。 注意: 以下所有的使用案例均基于vue3 setup。 同时由于ffmpeg版本不同会导致使用的api不同,使用案例前需要注意ffmpeg版本问题。 如果使用的是0.12需要使用…

内容分发功能升级!一站式搞定文案生成/违规检测/一键分发全流程

随着社交媒体的不断发展,越来越多的企业开始布局新媒体矩阵,从集团总部到区域门店、个人销售,从全品类到细分垂直类目、从单一平台到多平台,试图让品牌影响力覆盖更广泛群体, 当然,随之而来的,如…

im6ull学习总结(三-五)freetype显示正行字

知识补充 笛卡尔坐标系 这里笛卡尔坐标系就是初高中学的直角坐标系的第一象限 lcd坐标系则不同 这两个坐标系如何转换 观察两个坐标系 点(x,y)的x坐标在两个坐标系中相同,纵坐标(y)存在着yV-yV V是整个屏幕的行数的像…

禁用code server docker容器中的工作区信任提示

VSCode 添加受限模式,主要是防止自动运行代码的,比如在vscode配置的task和launch参数是可以运行自定义代码的。如果用VScode打开未知的工程文件就有可能直接运行恶意代码。 但是当我们的实验基础模板文件可控的情况下,要想禁用code server do…

如何快速取消开始右下角的更新并关机

关机时,隔几天老是会跳出来有更新并关机,想要直接关机又没有办法。怎么办?往下看 找到设置,进去 找到更新和安全 找到Windows更新 找到高级选项,把这些都关闭,然后在下面可以许安则暂停截止日期&#…

打破硬件壁垒:TVM 助力 AI技术跨平台部署

文章目录 《TVM编译器原理与实践》编辑推荐内容简介作者简介目录前言/序言获取方式 随着人工智能(Artificial Intelligence,AI)在全世界信息产业中的广泛应用,深度学习模型已经成为推动AI技术革命的关键。TensorFlow、PyTorch、MX…

显示器新赛道Type-C接口

如果把主机比作大脑,那显示器就是眼睛,没有眼睛,大脑再强大也发挥不出效果,所以显示器作为电脑最重要的输出设备,有着举足轻重的地位,可以说在生活中处处都有显示器的影子。其实显示器的历史也是科技发展史…

18. 从零用Rust编写正反向代理, 主动式健康检查源码实现

wmproxy wmproxy是由Rust编写,已实现http/https代理,socks5代理, 反向代理,静态文件服务器,内网穿透,配置热更新等, 后续将实现websocket代理等,同时会将实现过程分享出来&#xff…