PostgreSQL实战之物理复制和逻辑复制(三)

news2025/3/1 18:51:45

目录

PostgreSQL实战之物理复制和逻辑复制(三)

3.1 单实例、异步流复制、同步流复制性能测试

3.1 读性能测试

3.2 写性能测试


PostgreSQL实战之物理复制和逻辑复制(三)

3.1 单实例、异步流复制、同步流复制性能测试

根据PostgreSQL异步流复制、同步流复制原理分析,同步流复制方式的事务响应时间比异步流复制方式的响应时间高,推测同步流复制的主库性能损耗比异步流复制要大些,实际情况如何呢?这一小节将通过一个读场景和一个写场景对单实例、异步流复制、同步流复制进行压力测试,使用的压力测试工具为pgbench,测试机配置为4逻辑核CPU、8GB内存的虚拟机。
单实例主库的postgresql.conf主要参数如下所示:

wal_level = replica         #minimal, replica, or logical
synchronous_commit = off    #synchronization level;

异步流复制主库的postgresql.conf主要参数如下所示:

wal_level = replica            # minimal, replica,or logical
synchronous_commit = off       # synchronization level;
wal_keep_segments = 512        # in logfile segments, 16MB each; 0 disables

同步流复制主库的postgresql.conf主要参数如下所示:

wal_level = replica                    # minimal, replica, or logical
synchronous__commit = on               # synchronization level;
synchronous_standby_names = 'node2'    # standby servers that provide sync rep wal_keep_segments = 512                # in logfile segments,16MB each; 0 disables

以上仅列出单实例、异步流复制、同步流复制模式的主要postgresql.conf参数,其他postgresql.conf参数配置一样。

3.1 读性能测试

先对单实例、异步流复制、同步流复制进行读性能对比,选择基于主键的查询场景进行读性能测试,创建测试表test_per1并插入1000万测试数据,如下所示:

postgres=# CREATETABLE test_per1 (
id int4,
name text,
create_time timestamp(0) without time zone default clock_timestamp( ) ) ;
CREATETABLE
postgres=# INSERTINTO test_per1 (id, name)
SELECT n,n || 'per1'
FROM generate_series ( 1 ,100000000) n;
INSERT 0 10000000

之后添加主键并做表分析,如下所示。

postgres=# ALTER TABLE test_perl ADD PRIMARY KEY(id);
ALTERTABLE
postgres=# ANALYZE test_per1;
ANALYZE

编写压力测试查询SQL脚本,脚本名为select_per1.sql,如下所示:

\set v_id random( 1,10000000)
SELECT name FROM test_perl WHERE id= :v_id;

变量v_id从1到1000万范围内随机获取一个整数,根据主键查询表test _per1,之后测试并发连接数分别为2、4、8、16的TPS情况,pgbench测试脚本如下所示:

pgbench -c 2 -T 120 -d postgres -U postgres -n N -M prepared -f select_per1.sql
> select_2.out 2>&1 &
pgbench -c 4 -T 120 -d postgres -U postgres -n N -M prepared -f elect_per1.sql
> select_4.out 2>&1 &
pgbench -c 8 -T 120 -d postgres -U postgres -n N -M prepared -f select_per1.sql
> select_8.out 2>&1 &
pgbench -c 16 T 120 -d postgres -U postgres -n N -M prepared -f select_per1.sql
> select_16.out 2>&1 &

每次 pgbench测试时间为120秒,-M设置repared表示启用prepared statements,-n表示不做VACUUM操作,根据以上 pgbench测试脚本对单实例、异步流复制、同步流复制模式进行读压力测试,测试结果汇总如表所示。

 从以上测试看出,并发连接数为4时性能最高,这与设备CPU核数有关,本测试虚机CPU逻辑核为4,并发连接数上升到8和16时,读性能降低。以上是根据主键查询的场景,在连接数小于4时,异步流复制和同步流复制比单实例读性能略有降低,降幅在5%以内,总体来说,单实例、异步流复制、同步流复制在基于主键的读场景下性能差异较小。
注意:测试过程中我们发现CPU使用率大部分情况都在50%以下,如果一个pgbench进程没有充分消耗虚拟机的所有计算资源,可以在系统上跑多个pgbench进程测试这台设备此查询场景的最高tps。

3.2 写性能测试

接着对单实例、异步流复制、同步流复制模式进行写性能测试,测试场景为基于主键的更新操作,创建测试表test_per2并插入1000万数据,如下所示:

postgres=# CREATE TABLE test_per2(id int4, name text,flag char(1) ) ;
CREATE TABLE
postgres=# INSERT INTO test_per2 (id, name)
SELECT n,n || 'per2'
FROM generate_series( 1,10000000)n;
INSERT 0 10000000

添加主键并做表分析,如下所示

postgres=# ALTER TABLE test_per2 ADD PRIMARY KEY(id) ;
ALTER TABLE
postgres=# ANALYZE test_per2 ;
ANALYZE

编写压力测试脚本,脚本名为update_per2.sql 如下所示:

\set v_id random (1,1000000)
update test_per2 set flag=' l' where id= : v_id;

变量v_id从1到1000万范围内随机获取一个整数,根据主键更新表test_per2的 flag字段,之后测试并发连接数分别为2、4、8、16的TPS情况,pgbench测试脚本如下所示:

pgbench -c 2 -T 120 -d postgres -U postgres -n N -M prepared -f update_per2.sql
> update_2.out 2>&1 &
pgbench -c 4 -T 120 -d postgres -U postgres -n N -M prepared -f update_per2.sql
> update_4.out 2>&1 &
pgbench -c 8 -T 120 -d postgres -0 postgres -n N -M prepared -f pdate_per2.sql
> update_8.out 2>&1 &
pgbench -c 16 -T 120 -d postgres -U postgres -n N -M prepared -f update_per2.sql
> update_16.out 2>&1 &

每次pgbench测试时间为120秒,根据以上pgbench测试脚本对单实例、异步流复制、同步流复制模式进行写压力测试,测试结果汇总如表所示。

 从以上测试看出,基于主键更新的场景,异步流复制和单实例写性能几乎无差异,而同步流复制相比异步流复制和单实例场景性能大幅下降,在测试过程中,我们发现同步流复制主库上出现了大量UPDATE阻塞的情况,主要由于主库上提交事务时需等待备库接收并写入WAL日志后才向主库返回确认信息,这个过程消耗了大量通信时间,此过程消耗的时间越多,主库写场景TPS越小。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/9291.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智慧交通解决方案-最新全套文件

智慧交通解决方案-最新全套文件一、建设背景二、思路架构1、先进性2、全智慧化3、可靠性4、保密性三、解决方案四、获取 - 智慧交通全套最新解决方案合集一、建设背景 智能交通系统是未来交通系统的发展方向,它是将先进的信息技术、数据通讯传输技术、电子传感技术…

kt-connect使用-k8s流量代理

1.下载kt安装包 地址: https://github.com/alibaba/kt-connect/releases 2.下载k8s集群的config文件 cd /root/.kube 下载服务器的config文件3.安装config文件 切换到用户目录C:\Users\yangx创建.kube文件夹mkdir .kube目录结构为C:\Users\yangx\.kube把下载config文件移动到…

XSS进阶三

目录实验目的预备知识实验环境实验步骤一实例七、和实例六好像木有区别实验步骤二实例八、有时候你要跳出你的思维实验步骤三实例九、将xss进行到底实验目的 1.深入理解xss工作原理。 2.怎么去绕过规则实现xss。 3.培养学生的独立思考能力。 预备知识 XSS基础、XSS进阶一。 …

字节跳动测试岗面试记:二面被按地上血虐,所幸Offer已到手...

在互联网做了几年之后,去大厂“镀镀金”是大部分人的首选。大厂不仅待遇高、福利好,更重要的是,它是对你专业能力的背书,大厂工作背景多少会给你的简历增加几分竞争力。 但说实话,想进大厂还真没那么容易。最近面试字…

[力扣] 剑指 Offer 第二天 - 从尾到头打印链表

[力扣] 剑指 Offer 第二天 - 从尾到头打印链表题目来源题目描述题目分析解题思路递归反转数组(切片)代码实现递归执行结果复杂度分析反转切片执行结果复杂度分析总结耐心和持久胜过激烈和狂热。 题目来源 来源:力扣(LeetCode&…

【微服务】如何利用Nacos Config实现服务配置?

微服务--Nacos Config1、前言2、Nacos Config2.1 简介2.2 常见的服务配置中心3、Nacos Config入门4、Nacos Config深入4.1 配置动态刷新4.2 配置共享4.2.1 同一个微服务不同环境之间共享配置4.2.2 不同微服务之间共享配置5、Nacos的几个概念6、总结1、前言 在前期的文章中&…

纯代谢冲上Nature不是幻想,蛋氨酸饮食可影响小鼠癌症预后,同样可影响人体代谢

百趣代谢组学文献分享一篇题名 "Dietary methionine influences therapy in mouse cancer models and alters human metabolism",发表在Nature。文章是做的纯代谢研究(饮食影响癌症和代谢)。纯代谢冲上Nature,这篇文章是…

C++:重定义:符号重定义:变量重定义(三):解决变量重定义(声明extern外部变量)

在上一篇文章中,我们知道:可以通过声明 const/ static 变量来隔离变量在源文件的可见性,来解决变量重复定义的问题, C:重定义:符号重定义:变量重定义(二):解…

链表题目 : 链表的中间结点 与 链表中倒数第k个结点(leetcode 和 牛客)

坚持看完,结尾有思维导图总结 快慢指针在链表中的运用链表的中间结点步骤例子分析奇数情况偶数情况程序链表中倒数第k个结点步骤解析程序链表的中间结点 leetcode 链接 步骤 设置两个指针来遍历链表,一个叫 fast 每次跳过两个元素,一个叫 …

浅谈网络损伤仪HoloWAN的使用场景

目录一、HoloWAN 应用于卫星通讯领域1.1 卫星通讯领域的背景和挑战1.2 使用HoloWAN实现卫星⽹络仿真二、HoloWAN 应用于网络游戏2.1 网络游戏的背景和挑战2.2 使用HoloWAN模拟真实的网络环境三、HoloWAN 应用于数据中心迁移3.1 数据迁移的背景和挑战3.2 使用HoloWAN进行在线性能…

客户文章|南方医科大学李克玄团队破解肠道宏病毒与心肌病关系

近日凌恩生物合作客户南方医科大学南方医院麻醉科刘克玄团队在医学期刊《JOURNAL OF MEDICAL VIROLOGY》上发表名为“Gut microbiota dysbiosis is associated with sepsis-induced cardiomyopathy in patients: A case‒control study”研究,该研究利用宏基因组测序…

Imazing2023免费版苹果手机iOS数据管理软件

Imazing是一款很棒的苹果iOS管理工具,并且可以轻松扩大您对移动数据的控制范围,实现以往从未出现的功能,那么为了让大家更好的使用这款软件,因此小编就给大家带来了imazing使用教程,有需要的用户就一起来看看吧。一款安…

Linux安装java的JDK步骤

1.获取安装包(服务器不通外网的话,自行在本机下载然后上传) wget https://packages.baidu.com/app/jdk-8/jdk-8u121-linux-x64.tar.gz 2.创建安装目录 mkdir -p /usr/java 3.将前面下载的安装包移动到新目录 mv jdk-8u121-linux-x64.tar.g…

使用北鲲云在AWS上运行基因分析HPC任务

背景 近三十年来,生命科学与计算科学飞速发展。生物信息学是一门生命科学与计算科学的前沿交叉学科。生物信息学产生和迅猛发展的主要推动力来自于新一代测序等高通量技术在生命科学领域越来越广泛的应用。 基因组学是这一趋势的一个主要例子,其中高通量…

直播回顾|关联网络如何反团伙欺诈——标准答案版

11月10日下午15:00顶象数据科学家翼龙带来主题为《关联网络技术在业务安全中的应用》的直播。 直播内容包括常见的团伙欺诈场景、关联网络在反团伙欺诈中的作用、关联网络的技术框架,并就关联图谱构建和复杂网络算法展开了具体的讨论,最后以案例的形式形…

ElasticSearch 文档数据导入导出及两个ElasticSearch互相导入操作

文章目录一、前期安装准备二、ElasticSearch文档数据导入和导出三、两个ElasticSearch互相导入操作四、ElasticSearch版本不同是否有问题一、前期安装准备 1.先安装Node.js工具 Node.js官网下载地址:下载地址 双击下载完后的安装包,一直点下一步&#…

【日拱一卒】如何编写测试用例(下)

六、测试用例设计的误区 能发现到目前为止没有发现的缺陷的用例是好的用例; 首先要申明,其实这句话是十分有道理的,但我发现很多人都曲解了这句话的原意,一心要设计出发现“难于发现的缺陷”而陷入盲目的片面中去,忘记…

华为机试 - 城市聚集度

目录 题目描述 输入描述 输出描述 用例 题目解析 算法源码 题目描述 一张地图上有n个城市,城市和城市之间有且只有一条道路相连:要么直接相连,要么通过其它城市中转相连(可中转一次或多次)。城市与城市之间的道…

11月第2周榜单丨飞瓜数据B站UP主排行榜(哔哩哔哩)发布!

飞瓜轻数发布2022年11月07日-11月13日飞瓜数据UP主排行榜(B站平台),通过充电数、涨粉数、成长指数三个维度来体现UP主账号成长的情况,为用户提供B站号综合价值的数据参考,根据UP主成长情况用户能够快速找到运营能力强的…

Java#6(类和对象及封装)

目录 一.类和对象基本介绍 1.类:是对象共同特征的描述; 2.对象:是真实存在的具体东西 如何定义类? 对象的定义和使用? 二.封装 原则:对象代表什么,就得封装什么数据,并提供数据对应的行为 1.实例理解 三.Private(私有权限) 一.类和对象基本介绍 1.类:是对象共同特征…