首页 > 其他分享 >openGauss备库wal-replay与query冲突

openGauss备库wal-replay与query冲突

时间:2024-03-14 12:11:34浏览次数:27  
标签:主库 wal 备库 standby 查询 replay openGauss

openGauss 备库 wal replay 与 query 冲突

概述

openGauss 的物理流复制逻辑继承了 PostgreSQL,当一条数据从主库做变更到可以在备库查询到最新的值,在 PostgreSQL 备库分为三个阶段,分别是写入备库操作系统(remote_write),将缓存中的数据刷入到磁盘(on == flush),从磁盘将数据库回放(remote_apply);在 openGauss(自编译 1116 版本)备库中的三个阶段分别是接收 wal(remote_receive),写入(remote_write),回放(remote_apply)。

日常生产环境中,为了分担主库的访问压力,备库(hot_standby=on)常常需要对外提供只读服务,此时备库既要接受并重放通过流协议传过来的 wal 数据,同时也要对外提供只读查询服务,这两个任务同时进行难免会产生冲突,有时我们会发现备库的查询直接被取消中断,当数据库集群备库中出现如下所示的报错。

ERROR: canceling statement due to conflict with recovery
Detail: User query might have needed to see row versions that must be removed

当日志中出现这个报错,说明 wal apply 的操作与 query 冲突,查询的 sql 被取消,按常规来说 wal 数据回放级别应该是最高的,要保证备库第一时间获取并重放最新数据,与主库的数据保持一致,但是考虑到备库可以提供对外只读查询服务,添加参数 max_standby_streaming_delay 来告诉备库,如果发现与备库当前查询冲突,需要等待 max_standby_streaming_delay 的时长,如果超过这个时长,查询还没结束,就直接取消掉查询操作,而这种冲突常常出现在主库执行 vacuum 和 ddl 操作。

冲突原因

出现冲突报错的原因可能是由以下几种情况产生:

  1. max_standby_streaming_delay 参数值设置过低 PostgreSQL 的默认值是 30s,openGauss 的默认值是 3s,这个值需根据不同的业务应用去设置。
  2. 备库 sql 执行时间过长由于数据量增加或数据倾斜、表或索引膨胀等因素导致 sql 执行变慢。
  3. 备机服务器压力过大,处理慢主库开启了 full_page_writes,wal 的数据量变大,备库需要处理的数据增多,是备库的负载增加。

优化建议

  1. 调整参数值

    1. 适当增加 max_standby_streaming_delay 参数值,根据使用场景自定义设置。
    2. 设置参数 hot_standby_feedback = on,告诉主库执行 vacuum 操作时需要跳过哪些历史数据(不建议使用,会造成主库表膨胀)。
    3. 主节点设置 vacuum_defer_cleanup_age 参数,延迟清理 dead row(不建议使用,不好控制有效值)。
    4. 关闭 full_page_writes 参数,开启 enable_double_write 和 enable_incremental_checkpoint 参数来替代,openGauss 特性。
  2. 优化 sql 可通过执行计划查找 sql 变慢,执行效率变差的原因,并修复。

  3. 提升硬件配置查看服务器硬件资源使用情况,并做适当优化及调整。

  4. 开启并发 apply(opengauss 特有)开启并发回放参数 recovery_max_workers(默认值是 1,最大值是 4),来快速恢复 wal 数据并重放,提升效率。

标签:主库,wal,备库,standby,查询,replay,openGauss
From: https://www.cnblogs.com/renxyz/p/18072572

相关文章

  • ARC173D-Bracket Walk
    题意给定一个\(n\)个点\(m\)条边的有向强联通图,每条边为'('或')',问是否存在一条回路,使得每条边至少经过一次,且路径的边按顺序拼接后形成的字符串为合法括号序列输出'Yes'or'No'\(n\le4000\)、\(m\le8000\)做法边'('、')'分别替换成权值\(+1,-1\)观察1:题意可以转化成:找......
  • 如何将应用一键部署至多个环境?丨Walrus教程
    在Walrus平台上,运维团队在资源定义(ResourceDefinition)中声明提供的资源类型,通过设置匹配规则,将不同的资源部署模板应用到不同类型的环境、项目等。与此同时,研发人员无需关注底层具体实现方式,通过创建Resource对象声明需要使用的资源类型及基本信息,就可以灵活地在各种环境中自......
  • resurfaceio goreplay output-resurface 处理简单说明
    resurfaceiogoreplayoutput-resurface的处理实际上就是开发了一个新的output插件,对于数据的写入是使用了resurfaceio的golangloggersdk实现简单说明output_resurface.go,核心就是一个标准的goreplayplugin,通过gochannel实现消息处理,包装为一个自己的httpmessage......
  • resurfaceio goreplay output-s3 minio 兼容处理
    实际上此问题与以前版本goreplay对于s3的支持是一样的参考处理添加了新的环境变量AWS_FORCE_PATH_STYLE以及AWS_DISABLE_SSL,具体代码在rongfengliang/goreplay-new/blob/resurface/s3_reader.go中参考使用exportAWS_ACCESS_KEY_ID=minioexportAWS_SECRET_ACCE......
  • 卸载centos默认防火墙firewalld
    查看该防火墙是否运行systemctlstatusfirewalld停止systemctlstopfirewalld移除开机自启动systemctldisablefirewalld卸载yumremovefirewalld-y卸载完毕  已经没有了 ......
  • A. Brick Wall
    原题链接题解要让水平块尽可能多,垂直块尽可能少垂直块最少为零,也就是说,一行里全部都是水平块,可不可能?答案是可能的,一定存在某种组合使得水平块刚好塞满一行那么这种方块数最多的组合是多少?每个方块长度都为2,如果\(m\)为奇数,最后一个方块长度为3题解#include<bits/stdc++.......
  • 初中英语优秀范文100篇-087Walk for children in poor areas-为贫困地区的孩子们步行
    PDF格式公众号回复关键字:SHCZFW087记忆树1Notlongago,ourschoolorganizedacharitywalktoraisemoneyforchildreninpoorareas.翻译不久前,我们学校组织了一次慈善步行活动,目的是为贫困地区的孩子们筹集善款。简化记忆慈善句子结构主语Notlongago是......
  • 开年喜报!Walrus成功入选CNCF云原生全景图
    近日,数澈软件Seal(以下简称“Seal”)旗下开源应用管理平台Walrus成功入选云原生计算基金会全景图(CNCFLandscape)并收录至“AppDefinitionandDevelopment-ApplicationDefinition&ImageBuild”板块,该板块包含了Helm、Backstage、Dapr等知名开源项目。 图片截自:htt......
  • 监控项目Skywalking
    分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。这是官网提供的Skywalking架构图,可以分成几个部分,简单来说,可以分成oap、webapp和agent三部分:oap是skywalki......
  • Sasha and a Walk in the City
    先写一下官方题解首先原问题有一个很显然的解集:点集中任意两点不存在祖孙关系所以我们令\(f[v]\)表示以\(v\)为根的子树的点集的数目,这些点集中任意两点不存在祖孙关系有如果一个解集中有一个点是另一个点的祖先,我们画出图那么这个点上面的点(包括这些点的分支)是肯定不能选......