GaussDB关键技术原理:高弹性(六)

书接上文GaussDB关键技术原理:高弹性(五)从日志多流和事务相关方面对hashbucket扩容技术进行了解读,本篇将从扩容实践方面继续介绍GaussDB高弹性技术。

5 扩容实践  

5.1 工具介绍  

5.1.1 TPC-C

TPC-C(全称Transaction Processing Performance Council Benchmark C),是一套衡量联机交易处理系统(OLTP系统)的基准测试集。它于1992年8月首次发布,最终取代了早先的TPC-A成为事实上的行业标准。当前的最新版本是5.11, 发布于2010年2月。

TPC-C是以在线零售业公司为例设计的一种数据模型。每个仓库的数据量约为 76.823 MB。TPC-C涉及9张表,包含了新订单的生成(NewOrder)、支付操作(Payment)、订单状态查询(OrderStatus)、配送发货(Delivery)和库存状态查询(StockLevel)5类业务事务模型。5类业务的占比是可以由用户通过配置文件自定义的。

TPC-C的评测指标是每分钟处理的业务量(transactions per minute, tpmC),又称作流量指标(throughput)。本指标越大表示系统性能越高。首次发布的评测记录是1992年11月由IBM AS/400系统创造的,当时的结果是54 tpmC。到2000年左右,高端机器的平均记录是240万tpmC。许多公司为了获得这样的记录而构建了大量机器组合而成的系统。当前的最新记录是在2020年由云计算创造的7.073亿tpmC。

另外,TPC-C还可以通过系统性能价格比(cost-per-tpmC)的方式来体现,即测试系统报价(美元)与流量指标的比值。在获得相同的tpmC值的情况下,系统报价越低越好。当前许多小型本地系统旨在降低系统性能价格比而不懈努力。

BenchmarkSQL是一款基于JDBC实现的类似于OLTP的TPC-C标准测试工具,目前支持的数据库有:PostgreSQL、Oracle、Firebird。由于openGauss的接口与PostgreSQL兼容性较好,所以也可以使用该工具对openGauss数据库进行TPC-C测试。   

5.1.2 Sysbench

Sysbench是一款开源的多线程脚本工具,适用于Linux系统。Sysbench是C语言的二进制文件,使用Lua脚本执行基线测试,主要用于测试数据库系统。

Sysbench允许在命令行中指定测试类型,包括:

  • oltp_*.lua: 测试OLTP型数据库性能(使用自定义Lua脚本)

  • cpu: 测试CPU性能

  • fileio: 测试文件输入/输出性能

  • memory: 测试内存函数运行速度

  • threads: 测试多线程子系统性能

  • mutex: 测试互斥锁性能

下面我们主要关注第1种测试类型,即使用用户自定义Lua脚本。

在sysbench执行过程中和结束时,可以查看统计数据。其中,主要关注的是每秒事务执行数量(transactions per second,tps),每秒查询执行数量(queries per second, qps), 时延毫秒数(latency)。其中,每秒查询执行数量又可以细分为读查询(read),写查询(write),其他查询(other)。每秒事务/查询执行数量越高,时延毫秒数越低,说明数据库性能越好。

Sysbench目前已经内置了MySQL和PostgreSQL的驱动,由于GaussDB和PostgreSQL兼容性较好,所以可以通过指定pgsql的变量(包括host, port, user, password, db)来进行测试。

5.2 扩容步骤  

5.2.1 安装GaussDB集群

安装GaussDB集群需要使用运维工具集(Operation Manager,OM)和配置集群XML文件。其中,XML文件负责声明GaussDB集群的具体配置情况。本文以3CN3DN集群配置为例,展示安装GaussDB的命令如下:   

# root身份执行
sudo [your-location]/script/gs_preinstall -U [username] -G [usergroup] -X [xml-location] --alarm-type=1
# 切换到普通用户
su – [username]
gs_install -X [xml-location]
# 卸载cluster
gs_uninstall --delete-data

图1为分布式3CN3DN集群的架构。

图1 分布式3CN3DN集群架构图

5.2.2 启动GaussDB集群

通过cm_ctl命令,可以有效对GaussDB集群进行管控,命令如下:

# 集群启动
cm_ctl start 
# 集群停止
cm_ctl stop
# 查看集群信息
cm_ctl query -Cvdpi 
# 查询集群信息
cm_ctl query -Cv

5.2.3 扩容GaussDB集群

以3CN6DN集群配置为例,展示扩容GaussDB的命令如下:   

# 以root身份运行
sudo [your-location]/script/gs_preinstall -U [username] -G [usergroup] -X [new-xml-location] --alarm-type=1
# 切换到普通用户
su – [username]
# 扩容阶段1,添加新节点
gs_expand -t dilatation -X [new-xml-location] --parallel-jobs=1
# 扩容阶段2,数据重分布
gs_expand -t redistribute --redis-mode=insert --parallel-jobs=1

图2为分布式3CN6DN集群的GaussDB架构。

图2 分布式3CN6DN集群架构图

5.3 扩容期间的TPC-C测试  

在数据库扩容期间对GaussDB集群使用TPC-C工具同步监控,可以获得hashbucket表在扩容期间对TPCC模型性能的影响。

导入10000 warehorse的数据,3C3D,单DN 800GB数据,运行600并发TPCC,叠加hashbucket扩容(3DN扩6DN),业务运行情况如下图3所示, 可以看出整个扩容过程中,TPCC业务没有出现性能大幅度下降的情况,整体运行平稳。   

图3 扩容期间TPCC性能测试结果图

5.4 扩容期间的sysbench测试  

在数据库扩容期间对GaussDB集群使用sysbench工具同步监控,可以获得普通表和hashbucket表在扩容期间的JOIN操作性能影响,图x为JOIN操作示意图。我们设定Lua脚本的测试场景为等值JOIN。JOIN操作的两张表分别具有Column A, Column B两个int类型。两张表的数据量为1千万条,其中,Column A为随机值,范围[1, 100,000];Column B为唯一递增值,范围[1, 10,000,000],两者的范围差距为100倍。完整的SQL语句为:

 select * from h1 left JOIN h2 on h1.b = h2.b and h1.a = h2.a where h2.a = $1 order by h2.b limit 1;

图4 两张表JOIN操作示意图

实验中每个物理节点的配置参数如表1所示:

表1  物理节点的配置参数

软硬件指标

型号数值

处理器

64 核Intel(R) Xeon(R) CPU E5-2690 v3 @ 2.60GHz

内存

256 GB

磁盘

ssd磁盘

网卡

万兆网

操作系统

EulerOS 2.0 (SP5) x86_64

普通表执行的是逻辑扩容,遍历所有库依次搬迁每个表。对于同一个库,同一个模式下的两张表:当表1完成扩容而表2未开始扩容时,两个表的位于在不同的组节点(NodeGroup)上,此时对表1,表2执行JOIN操作会造成CN无法利用分布式架构下推JOIN操作到各个DN上执行,而是会生成跨DN的stream计划进行数据重分布后在进行JOIN,大量的跨节点通信导致性能劣化严重,如图5所示。   

图5 普通表扩容期间的tps

hashbucket表执行的是物理扩容,以库(database)为单位进行库内所有表的bucket搬迁。对于同一个库内的两张表:除了JOIN期间同步上线的bucket之外,其他的绝大多数bucket位于同一个组节点(NodeGroup)上,此时CN可以利用分布式架构分发JOIN操作到各个DN上执行,性能不受影响,如图6所示。

图6 hashbucket表扩容期间的tps

欢迎小伙伴们交流~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode 540. 有序数组中的单一元素

1.题目基本信息 1.1.题目描述 给你一个仅由整数组成的有序数组,其中每个元素都会出现两次,唯有一个数只会出现一次。 请你找出并返回只出现一次的那个数。 你设计的解决方案必须满足 O(log n) 时间复杂度和 O(1) 空间复杂度。 1.2.题目地址 https:…

[3.4]【机器人运动学MATLAB实战分析】PUMA560机器人逆运动学MATLAB计算

PUMA560是六自由度关节型机器人,其6个关节都是转动副,属于6R型操作臂。各连杆坐标系如图1,连杆参数如表1所示。 图1 PUMA560机器人的各连杆坐标系 表1 PUMA560机器人的连杆参数 用代数法对其进行运动学反解。具体步骤如下: 1、求θ1 PMUMA56

CSS 圆形边框与阴影

目录 1. 圆角边框 1.1 正圆 1.2 圆角矩形 1.3 任意圆角 1.4 某个圆角 2. 盒子阴影 3. 文字阴影 1. 圆角边框 1.1 正圆 1.2 圆角矩形 1.3 任意圆角 1.4 某个圆角 2. 盒子阴影 3. 文字阴影

Vue Mini基于 Vue 3 的小程序框架

新的小程序框架 https://vuemini.org/ Vue Mini 是一个基于 Vue 3 的小程序框架,它允许开发者利用 Vue 3 的强大功能来构建微信小程序。Vue Mini 的核心优势在于它的响应式系统和组合式 API,这些特性让开发者能够以一种更声明式、更高效的方式来编写和…

实景三维赋能城镇数字化规划

在数字化浪潮的推动下,城镇规划正经历着前所未有的变革。实景三维技术以其独特的优势,为城镇数字化规划提供了强大的技术支持。今天,我们将深入探讨实景三维技术如何赋能城镇数字化规划。 一、城镇规划面临的挑战 随着城镇化进程的加快&…

2024年研究生数学建模“华为杯”E题——肘部法则、k-means聚类、目标检测(python)、ARIMA、逻辑回归、混淆矩阵(附:目标检测代码)

文章目录 一、情况介绍二、思路情况二、代码展示三、感受 一、情况介绍 前几天也是参加了研究生数学建模竞赛(也就是华为杯),也是和本校的两个数学学院的朋友在网上组的队伍。昨天(9.25)通宵干完论文(一条…

计算机毕业设计 基于Python的热门微博数据可视化分析系统的设计与实现 Python+Django+Vue 可视化大屏 附源码 讲解 文档

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

计算机毕业设计Hadoop+Spark知识图谱体育赛事推荐系统 体育赛事热度预测系统 体育赛事数据分析 体育赛事可视化 体育赛事大数据 大数据毕业设计

《HadoopSpark知识图谱体育赛事推荐系统》开题报告 一、研究背景与意义 随着互联网技术的迅猛发展和大数据时代的到来,体育赛事数据的数量呈爆炸式增长。用户面对海量的体育赛事信息,常常感到信息过载,难以快速找到感兴趣的赛事内容。传统的…

软件管理【1.10】

软件管理【1.10】 13、软件管理13.1.包管理工具rpm13.2.yum和dnf13.2.1.配置yum源13.2.2.只下载安装包,不安装13.2.3.配置本地光盘ISO文件安装13.2.4.配置阿里云epel源13.2.5.base-for-centos7.repo13.2.6.base-for-rocky8.repo13.3.搭建私有yum仓库13.3.1.Apache实现网战功能…

Kafka和RabbitMQ区别

RabbitMQ的消息延迟是微秒级,Kafka是毫秒级(1毫秒1000微秒) 延迟消息是指生产者发送消息发送消息后,不能立刻被消费者消费,需要等待指定的时间后才可以被消费。 Kafka的单机呑吐量是十万级,RabbitMQ是万级…

sql-labs靶场第二关测试报告

目录 一、测试环境 1、系统环境 2、使用工具/软件 二、测试目的 三、操作过程 1、寻找注入点 2、注入数据库 ①Order by判断列数 ②判断回显地方 ③爆库,查看数据库名称 ④爆表,查看security库的所有表 ⑤爆列,查看users表的所有…

给出向量求叉乘(在垂直的时候可以简化)

1、可以用那个求行列式的方法求叉乘。 2、在两个向量垂直的时候,可以用简化方法,前面幅度相乘,然后ex叉乘ey是ez 注意叉乘结果无论原向量是不是垂直,叉乘结果都与两个向量垂直

HUAWEI New4.9G 与 2.6G 无法正常切换问题处理案例

HUAWEI New4.9G 与 2.6G 无法正常切换问题处理案例 在某地市的 XX 音乐节保障准备期间,为确保活动期间的网络质量,现场新开了 4.9G HUAWEI 室外基站。在网络优化和测试中,发现UE无法实现从 2.6G 到 4.9G 的正常切换。虽然现场具备 4.9G信号覆…

【STM32单片机_(HAL库)】4-5-1【定时器TIM】【感应开关盖垃圾桶】SG90舵机模块实验

1.硬件 STM32单片机最小系统SG90舵机模块 2.软件 sg90驱动文件添加main.c程序 #include "sys.h" #include "delay.h" #include "led.h" #include "sg90.h"int main(void) {HAL_Init(); /* 初始化HAL库 */…

【算法】链表:160.相交链表(easy)+双指针

系列专栏 《分治》 《模拟》 《Linux》 目录 1、题目链接 2、题目介绍 3、解法(双指针) 返回结果 算法正确性 时间复杂度 4、代码 1、题目链接 160. 相交链表 - 力扣(LeetCode) 2、题目介绍 ​ 3、解法(…

Pikachu-xss防范措施 - href输出 js输出

总体原则: 输入做过滤,输出做转义 过滤:根据业务需要进行过滤,如:输入点要求输入手机号,则只允许输入手机号格式的数字; 转义:所有输出到前端的数据,都根据输出点进行转…

OpenCV计算机视觉库

计算机视觉和图像处理 Tensorflow入门深度神经网络图像分类目标检测图像分割OpenCVPytorchNLP自然语言处理 OpenCV 一、OpenCV简介1.1 简介1.2 OpenCV部署1.3 OpenCV模块 二、OpenCV基本操作2.1 图像的基本操作2.1.1 图像的IO操作2.1.2 绘制几何图像2.1.3 获取并修改图像的像素…

【算法篇】回溯算法类(2)(笔记)

目录 一、LeetCode 题目 1. 子集II 2. 递增子序列 3. 全排列 4. 全排列 II 5. 重新安排行程 6. N皇后 7. 解数独 二、题目思路整理 一、LeetCode 题目 1. 子集II https://leetcode.cn/problems/subsets-ii/description/https://leetcode.cn/problems/subsets-ii/des…

【C++】类与对象基础概念解析

恭喜你学习完C语言与数据结构的有关内容,现在让我们开始进行对C的学习吧~ 💝💝💝如果你对C语言或数据结构还存在疑惑,欢迎观看我之前的作品 👉【数据结构】 👉【C语言】 目录 一、引言 二、类…

MapBox Android版开发 6 关于Logo

MapBox Android版开发 6 关于Logo Logo的显示查看源码及思路(Logo)第一步第二步 隐藏Logo示例查看源码及思路(Info)第一步第二步 隐藏Logo和Info示例 看到有网友留言问如何移除Logo,今天看了下V9源码,发现M…