Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >openGauss中的并行回放以及和PG的对比

openGauss中的并行回放以及和PG的对比

作者头像
数据库架构之美
发布于 2020-10-28 09:14:53
发布于 2020-10-28 09:14:53
1.3K00
代码可运行
举报
运行总次数:0
代码可运行

openGauss在非极致rto特性下通过recovery_max_workers和recovery_parallelism参数控制并行回放的线程数。下面测试一下效果,可以通过停止备库来模拟主库xlog堆积,此处统一模拟堆积到1000个xlog后启动备库,来进行应用和回放,最终统计回放完成时间。可以通过比对receiver_replay_location和receiver_flush_location之间的差距来判断是否回放完成。

由于recovery_max_workers和recovery_parallelism参数具有联动性,设置一个另外一个会自动设置为相同的值,此处只设置recovery_max_workers。

01.

recovery_max_workers=1

停止备库,启动压测程序,待xlog达到1000时关闭压测程序

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[omm@db01 gaussdata]$ ll pg_xlog/ |wc -l
1000
[omm@db02 pg_xlog]$ gs_ctl start -M standby
[omm@db02 pg_xlog]$ date
Wed Sep 16 15:26:53 CST 2020

可以看到处于catchup过程:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[omm@db02 pg_xlog]$ gs_ctl query
[2020-09-16 15:27:12.958][213287][][gs_ctl]: gs_ctl query ,datadir is (null)
 HA state:           
        local_role                     : Standby
        static_connections             : 2
        db_state                       : Catchup
        detail_information             : Normal


 Senders info:       
No information
 Receiver info:      
        receiver_pid                   : 211639
        local_role                     : Standby
        peer_role                      : Primary
        peer_state                     : Normal
        state                          : Catchup
        sender_sent_location           : 3C/28800000
        sender_write_location          : 3D/EE528328
        sender_flush_location          : 3D/EE528328
        sender_replay_location         : 3D/EE528328
        receiver_received_location     : 3C/28000000
        receiver_write_location        : 3C/27000000
        receiver_flush_location        : 3C/27000000
        receiver_replay_location       : 3A/8F4A9910
        sync_percent                   : 97%
        channel                        : 192.168.1.2:48458<--192.168.1.1:5533

过一段时间发现追平了,但是receiver_replay_location和receiver_flush_location之间有差距,持续观察:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[omm@db02 pg_xlog]$ gs_ctl query[2020-09-16 15:32:08.432][237296][][gs_ctl]: gs_ctl query ,datadir is (null) HA state:                   local_role                     : Standby        static_connections             : 2        db_state                       : Normal        detail_information             : Normal Senders info:       No information Receiver info:              receiver_pid                   : 211639        local_role                     : Standby        peer_role                      : Primary        peer_state                     : Normal        state                          : Normal        sender_sent_location           : 3D/FC647630        sender_write_location          : 3D/FC647630        sender_flush_location          : 3D/FC647630        sender_replay_location         : 3D/FC647630        receiver_received_location     : 3D/FC647630        receiver_write_location        : 3D/FC647630        receiver_flush_location        : 3D/FC647630        receiver_replay_location       : 3D/FC647630        sync_percent                   : 100%        channel                        : 192.168.1.2:48458<--192.168.1.1:5533


[omm@db02 pg_xlog]$ date
Wed Sep 16 15:32:09 CST 2020

总共耗时:316s

02.

recovery_max_workers=8

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[omm@db01 gaussdata]$ ll pg_xlog |wc -l
1002

启动一个备库,开始追数和回放

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[omm@db02 gaussdata]$ date
Thu Sep 17 09:32:59 CST 2020
[omm@db02 gaussdata]$ gs_ctl query
[2020-09-17 09:33:02.663][53466][][gs_ctl]: gs_ctl query ,datadir is (null)
 HA state:           
        local_role                     : Standby
        static_connections             : 2
        db_state                       : Catchup
        detail_information             : Normal


 Senders info:       
No information
 Receiver info:      
        receiver_pid                   : 53065
        local_role                     : Standby
        peer_role                      : Primary
        peer_state                     : Normal
        state                          : Catchup
        sender_sent_location           : 44/65800000
        sender_write_location          : 47/A600A858
        sender_flush_location          : 47/A600A858
        sender_replay_location         : 47/A600A858
        receiver_received_location     : 44/65800000
        receiver_write_location        : 44/65000000
        receiver_flush_location        : 44/65000000
        receiver_replay_location       : 44/432AFCC8
        sync_percent                   : 95%
        channel                        : 192.168.1.2:38322<--192.168.1.1:5533

稳定后

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[omm@db02 gaussdata]$ gs_ctl query
[2020-09-17 09:41:05.963][93661][][gs_ctl]: gs_ctl query ,datadir is (null)
 HA state:           
        local_role                     : Standby
        static_connections             : 2
        db_state                       : Normal
        detail_information             : Normal


 Senders info:       
No information
 Receiver info:      
        receiver_pid                   : 53065
        local_role                     : Standby
        peer_role                      : Primary
        peer_state                     : Normal
        state                          : Normal
        sender_sent_location           : 47/AF961308
        sender_write_location          : 47/AF961308
        sender_flush_location          : 47/AF961308
        sender_replay_location         : 47/AF961308
        receiver_received_location     : 47/AF961308
        receiver_write_location        : 47/AF961308
        receiver_flush_location        : 47/AF961308
        receiver_replay_location       : 47/AF961308
        sync_percent                   : 100%
        channel                        : 192.168.1.2:38322<--192.168.1.1:5533


[omm@db02 gaussdata]$ date
Thu Sep 17 09:41:07 CST 2020

总耗时:428s

可以看到并行回放并没有起到作用,甚至开启多线程回放后反而回放变慢了。

测试过程中大致看了下日志产生速度:70M/s,插入的数据每秒6万条,而pg中在插入每秒6万条的时候,日志产生速度只有35M/s左右,是openGauss的一半,这块也需要优化。在极限测试情况下,在150并发时,pg的日志产生速度大概70M/s,tps大概是每秒13万行的插入,此时replay_lag确实在逐渐增大,说明在这个大小的日志产生速度下,pg已经回放不过来这么大量的日志。openGauss在6万tps插入时已经达到这么大日志量。

所以从上面的表格以及测试结果可以看到首先开启并行回放参数不会加快回放速度,甚至回放速度回变慢,openGauss备库回放跟不上的原因并不在于openGauss的回放速度比pg慢,回放速度他俩是差不多的,而在于openGauss在插入同样的数据时产生的日志量是pg的两倍,这样造成它的回放跟不上。这个日志量的问题需要解决。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据库架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
openGauss备机追数Catchup过程中主库写入阻塞问题
最近在测试openGauss主从复制时发现一个问题:当备机落后主机很多时(比如停了一段时间后再启动),启动后会自动的追数,追数的过程状态是catchup,而在catchup的过程中,主库上的写入会全部阻塞,当然经过进一步验证,如果存在其他正常的备库(状态是normal),那么其中一个备库catchup不会阻塞主库。
数据库架构之美
2020/09/24
9130
MogDB/openGauss 手动部署(非OM工具)单机、主备、主备级联架构
注:本文源自墨天轮”我的国产数据库之路“的征文,原文链接:https://www.modb.pro/db/70779
数据和云
2021/07/30
1.3K0
不使用华为om工具如何手工部署openGauss主从流复制环境
PostgresSQL在9.1之后引入了主从的流复制机制,所谓流复制,就是从服务器通过tcp流从主服务器中同步相应的数据。这样当主服务器数据丢失时从服务器中仍有备份。与基于文件日志传送相比,流复制允许保持从服务器更新。从服务器连接主服务器,其产生的流WAL记录到从服务器, 而不需要等待主服务器写完WAL文件。
数据库架构之美
2020/08/13
1.4K1
不使用华为om工具如何手工部署openGauss主从流复制环境
openGaussDB 初体验(下)
由于上篇文章较长,故分开写,点击可看上文 openGauss DB 初体验(上)看完后进入到如下接着来正式安装 openGauss。
JiekeXu之路
2020/08/06
2.4K0
openGaussDB 初体验(下)
openGauss830版本中对于备份模块的增强与当前问题
会报出备机不支持备份,同时让你检查full_page_writes是否开启(full_page_writes是开启的)
数据库架构之美
2020/09/24
6030
openGauss主备搭建方法详解
在当今数字化时代,数据库的高可用性至关重要,OpenGauss 作为一款高性能、高可靠的开源关系型数据库,其主备搭建能有效保障数据的安全性与业务的连续性。本文将详细介绍 OpenGauss 主备搭建的方法,帮助大家深入了解这一关键技术实践。
炒香菇的书呆子
2025/01/11
2680
使用Docker部署openGauss国产数据库
江湖有缘
2023/09/21
2.6K1
使用Docker部署openGauss国产数据库
PostgresSQL 主从搭建步骤
由于工作需要,最近开始接触各种数据库,并尝试各种数据库产品的高可用方案。今天分享的是postgresSQL的主从配置,其实还是蛮简单的,跟随本文的步骤,保证能实现PG主从的搭建。
星哥玩云
2022/08/13
2.7K0
【DB宝100】在openEuler 22.03系统上使用yum安装openGauss单机环境
https://mp.weixin.qq.com/s/sh6GIhTV2V2aaxuZQDoozg
AiDBA宝典
2022/05/25
1.2K0
PostgreSQL从小白到高手教程 - 第44讲:pg流复制部署
PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。
用户5892232
2024/02/02
5550
PostgreSQL从小白到高手教程 - 第44讲:pg流复制部署
Postgresql主从复制
Postgresql主从复制 主备数据库启动,备库启动wal_receiver进程,wal进程向主库发送连接请求; 主库收到连接请求后启动wal_sender进程,并与wal_receiver进程建立tcp连接; 备库wal_receiver进程发送最新的wal lsn 给主库; 主库进行lsn 对比,定期向备库发送心跳信息,来确认备库的可用性,并且将没有传递的wal日志文件进行发送,同时调用SyncRepWaitForLSN()函数来获取锁存器,并且等待备库响应;锁存器的释放时机和主备同步模式的选择有
用户7353950
2022/05/11
9480
Postgresql主从复制
学习实践|CentOS安装openGauss 6.0.0 (LTS)数据库实践
这里推荐一篇实用的文章:Vue项目上线前的优化:移除console.log详解,作者:【Front_Yue】。
六月暴雪飞梨花
2024/11/19
5940
学习实践|CentOS安装openGauss 6.0.0 (LTS)数据库实践
手把手带你在Centos7.5上编译安装openGauss数据库
openGauss于6月30号开源,继承于原来的GaussDB300的内核,最初源于pg9.2.4内核,但是对pg内核做了很多改动,具体可以参考我这篇文章《华为GaussDB相比PostgreSQL做了哪些内核优化?》。其实从参数也可以看出来华为对内核的改造,在pg11.3版本数据库中共有290个参数,openGauss里目前有515个参数,我们知道数据库参数都是涉及到非常内核的东西,所以华为的研发能力还是很强的。比如说前两天刚刚看到一个参数enable_increment_checkpoint,在openGauss里支持了增量检查点,默认使用double write双写机制来确保不会出现断页的问题,代替了full_page_writes带来的性能开销和wal容量开销。
数据库架构之美
2020/07/15
2.5K1
openGauss 3.1.0 版本gs_stack功能解密
不管是测试还是研发,工作中总有遇到各种各样的问题。比如,你有没有遇到过在数据库中执行某个SQL,却一直不返回结果,这时候的你是不是非常想看一下代码执行到了哪个函数?或者是数据库不响应连接,需要查看数据库当前线程的执行情况呢?而在实际生产中,获取生产系统进程堆栈比较麻烦,需要在服务端后台执行gstack命令。本期为大家介绍的openGauss 3.1.0版本中内置gs_stack工具,则可以通过函数调用的方式输出指定线程的堆栈,用于解决现网环境缺少gs_stack工具无法获取调用栈的问题。
大柏树
2022/12/13
4450
Postgresql总结几种HA的部署方式
第二步:pg_basebackup -Fp -P -x -D ~/app/data/pg_root21 -l basebackup21
mingjie
2022/05/12
1.6K0
Postgresql总结几种HA的部署方式
【DB宝60】PG12高可用之1主2从流复制环境搭建及切换测试
PostgreSQL在9.x之后引入了主从的流复制机制,所谓流复制,就是备服务器通过tcp流从主服务器中同步相应的数据,主服务器在WAL记录产生时即将它们以流式传送给备服务器,而不必等到WAL文件被填充。
AiDBA宝典
2021/07/29
3.4K0
pg_rewind到底能做什么?
我们知道postgresql的主从切换有点麻烦,或者说操作步骤要求很严格。可能我们经常遇到这种情况,在没有将主库杀死的情况下将备库提升为主,这时主备库可能由于某种原因都在提供写入操作,这时发生脑裂,如果不考虑数据丢失因素,这时我们可能想将原来的主库以备库的模式重新加入集群,但是主备库此时的时间线已经偏离了,这时就需要我们的pg_rewind工具了。
数据库架构之美
2019/12/18
8290
通过 Docker 实现国产数据库 OpenGauss 开发环境搭建
GS_PASSWORD:必须设置该参数。该参数值不能为空或者不定义。该参数设置了 openGauss 数据库的超级用户 omm 以及测试用户 gaussdb 的密码。openGauss 安装时默认会创建 omm 超级用户,该用户名暂时无法修改。测试用户 gaussdb 是在 entrypoint.sh 中自定义创建的用户。openGauss 镜像配置了本地信任机制,因此在容器内连接数据库无需密码,但是如果要从容器外部(其它主机或者其它容器)连接则必须要输入密码。openGauss 的密码有复杂度要求,需要:密码长度 8 个字符及以上,必须同时包含英文字母大小写,数字,以及特殊符号。
耕耘实录
2024/05/24
6640
openGauss学习笔记- - -初始与使用技巧
openGauss是关系型数据库,采用客户端/服务器,单进程多线程架构;支持单机和一主多备部署方式,同时支持备机可读、双机高可用等特性。
用户10216580
2022/12/06
4790
openGauss学习笔记- - -初始与使用技巧
openGauss与PostgreSQL的对比
华为公司今年6.30开源了openGauss数据库,openGauss数据库内核基于postgresql9.2.4演进而来,pg11.3版本数据库中共有290个数据库参数,而openGauss目前有515个数据库参数,每个参数对应一个数据库内核功能,所以可以看到华为公司对pg的内核还是做了非常大的改造和增强。
数据库架构之美
2020/08/05
11.1K0
相关推荐
openGauss备机追数Catchup过程中主库写入阻塞问题
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档