OceanBase v4.2 特性解析:支持并发建表,提升OMS导入效率

news2025/2/26 13:22:20

背景

OceanBase 4.0版本新增了单日志流架构,使得OBServer单机突破了原有的分区数限制,支持更大数量的分区。

很多业务环境为了处理单机数据量过大的问题,通常采取分库分表的方法,这一方法会导致业务需要创建数十万乃至百万级别的表。然而,当这些业务迁移到OceanBase时,由于OceanBase集群内部DDL操作是串行执行的,使得通过OMS进行结构导入的过程变得异常耗时,经常需要数十小时才能完成,这无疑对迁移的效能造成了影响。

结构迁移的DDL以建表语句为主,所以要解决OMS结构导入的速度,关键就是要提升建表语句的吞吐。OceanBase v4.2.1对建表方案进行并发化改造,使无冲突的建表语句之间能并发执行,通过提高OMS结构导入DDL语句的吞吐,降低整体执行耗时。

实现原理

下面通过分别介绍串行DDL和并行DDL的实现原理,直观的从流程上感受DDL执行过程中耗时的地方,了解并行DDL功能改造的价值。

串行DDL

每个集群都有一个唯一的RootService服务,RootService服务所在的节点有一个DDL线程,集群内所有的DDL都会路由到RootService服务所在节点上串行执行。

如下图所示,两个不同的client的DDL请求路由到OBServer上,会内部路由到RootService服务所在的节点排队执行,客户端同步等待DDL的执行结果。视DDL请求的复杂度而定,执行单个DDL耗时一般在100ms以上;多个DDL请求按到达RootService服务所在节点的顺序,排队串行执行。

1715071393

不论集群与租户的规格有多大,始终只有一个线程执行DDL。在高并发DDL场景下,受限于DDL集群内串行执行的限制,绝大多数DDL都在队列中等待执行,整体DDL的吞吐很低。但实际上集群有很多空闲资源有待利用。

并发DDL

OceanBase v4.1.0 版本初次提供了并发DDL执行的能力。如下图所示,通过扩展RootService服务所在节点的DDL线程数目,将单一DDL的实现拆分成不同阶段,同时将其中的部分阶段进行并行化改造。使得RootService服务所在的节点有一定的并发执行能力处理多个无冲突的DDL请求,有效提高整体DDL的吞吐。

1715071405

上述改造使得RootService可以将所在节点中更多的空闲资源利用起来,进行DDL服务。RootService所在节点扩展出来的DDL线程数目跟集群的规格相关,因此当集群与租户的规格扩展时,DDL的执行能力也能随之扩展。

目前具备并发执行能力的DDL有:

  1. truncate table:OceanBase 4.1.0版本 版本开放相关能力。
  2. create table:OceanBase 4.2.1版本 版本开放相关能力。

使用说明

当集群以OceanBase 4.2.1之后的版本部署起来,或者升级到4.2.1之后的版本,并发建表的功能就会自动开启,无需用户额外进行配置。租户下可以执行以下语句查看当前租户的版本,当版本 >= 4.2.1,用户可以通过起多个并发执行建表语句启用并发建表的功能。

MySQL [oceanbase]> show parameters like "compatible";
+------+----------+----------------+----------+------------+-----------+---------+---------------------------------------+--------------+--------+---------+-------------------+
| zone | svr_type | svr_ip         | svr_port | name       | data_type | value   | info                                  | section      | scope  | source  | edit_level        |
+------+----------+----------------+----------+------------+-----------+---------+---------------------------------------+--------------+--------+---------+-------------------+
| z2   | observer | 100.88.107.209 |     3025 | compatible | NULL      | 4.2.1.0 | compatible version for persisted data | ROOT_SERVICE | TENANT | DEFAULT | DYNAMIC_EFFECTIVE |
| z1   | observer | 100.88.107.223 |     3024 | compatible | NULL      | 4.2.1.0 | compatible version for persisted data | ROOT_SERVICE | TENANT | DEFAULT | DYNAMIC_EFFECTIVE |
| z3   | observer | 100.88.107.212 |     3026 | compatible | NULL      | 4.2.1.0 | compatible version for persisted data | ROOT_SERVICE | TENANT | DEFAULT | DYNAMIC_EFFECTIVE |
+------+----------+----------------+----------+------------+-----------+---------+---------------------------------------+--------------+--------+---------+-------------------+
3 rows in set (0.07 sec)

注意事项 

  • 并发DDL和串行DDL逻辑整体互斥,要想并发DDL整体达到最大吞吐,需要避免并发DDL执行过程中集群有其它的串行DDL执行。
  • 由于DDL请求总是由RootService所在节点执行,为了减少DDL执行过程中的网络消耗,需要尽可能的保证RootService和租户leader在同一个节点上。
  • 由于提高了建表的并发度,并发执行的DDL对系统会有额外的负载,需要消耗额外的资源。
  • 系统租户需要有足够的线程响应DDL请求,想要达到DDL最大吞吐,系统租户需要额外的6C(CPU)。
  • 用户租户需要有足够的线程响应DDL请求及写内部表的请求,想要达到DDL最大吞吐,用户租户需要额外的14C(CPU)。

同时,由于并发执行的建表语句吞吐量较大,短时间内会往内部表写入大量数据,对租户的内存、磁盘有额外的要求。租户磁盘较小内存难以转储落盘,而内存紧张的情况下会触发写入限速,影响并发DDL执行速度以及已有业务流量。

性能对比

OBSERVER建表性能测试

在以下部署方式下,使用不同方式创建不同数目的非分区表,有如下测试结果及结论。

环境部署

  1. 1:1:1部署,RS和租户leader部署在一起,压力起在备节点。
  2. sys租户规格:16C32G
  3. 普通租户规格:8C80G

建表语句

DDL1

create table t1 (c1 int primary key, c2 int, c3 varchar(20), c4 int, c5 timestamp, c6 int, c7 int, c8 int, c9 int, c10 varchar(20));

DDL2:

create table t1 (c1 int primary key, c2 int, c3 varchar(20), c4 int, c5 timestamp, c6 int, c7 int, c8 int, c9 int, c10 varchar(20), key i1(c4));

测试结果

DDL类型DDL1DDL1DDL1DDL1DDL2
表数目3,200100,0001,000,000683680683,678 (table)+683,678 (index)
并发数3232323232
方式串行并发串行并发串行并发并发并发
总耗时(s)488.6316.3815928.64549.61159286.4(理论值)13775.086433.1211441.5
QPS(req/s)6.55195.386.28181.956.28(理论值)72.59106.28119.5

由于串行创建100W张表耗时过长,暂以10W表的性能为准,考虑到性能衰减,实际QPS会更低,仅用于与并发建表性能进行对比。

基于上述测试结果有以下结论:

  • 随着建表数目的增加,受限于实时内存使用情况,串行建表和并发建表的性能都有所衰减。并发建表由于在较短时间内写入大量数据,衰减程度较为显著;串行建表总耗时较长,QPS较为稳定。
  • 建表语句较为简单的情况下,并发建表性能较串行建表性能有10~30倍性能提升。
  • 建表语句带索引,索引表相比用户表构建耗时更短,同等表(含索引)数目量级QPS会有所提升。
  • 经测试,租户leader和RS不在同一个节点,DDL会涉及远程执行以及分布式执行,同等量级性能约衰减为原来的50%。

需要注意的是,该场景验证的相对简单的创建非分区表的性能,建表语句越复杂(是否分区、是否含索引/外键、是否带索引等),单个建表语句耗时越长,并发DDL的吞吐也会相应下降。但即便如此,并发建表的性能较串行建表也有10倍以上性能提升。

实际OMS导入场景实例

集群规格: 8C32G 租户规格: 4C16GB mysql库表统计:Table:9101(非分区表)版本:4.2.1
模式串行建表串行建表+schema异步刷新并行建表
总耗时17 min13min5min

该场景集群规格为8c,能够分配四个并行DDL工作线程进行并行建表任务。在同样尽力确保多机schema同步刷新的条件下,可以看到并行建表速度相比于串行建表速度提升了三倍多。而串行建表过程中将schema异步刷新的优化打开,并行建表也比串行建表速度提升了两倍多。

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

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

相关文章

电网铁塔安全:输电线路智能螺栓在线监测装置|远程了解螺栓异常情况

电网铁塔安全:输电线路智能螺栓在线监测装置|远程了解螺栓异常情况 在浩渺的天空下,银线如织,纵横交错,那是我们的输电线路,是点亮万家灯火的血脉。然而,这看似坚强的网络,实则也隐藏着许多不为…

新港海岸NCS8801 RGBLVDS转DPEDP,支持4K60HZ,成熟方案大批量出货产品,国产化认证

NCS8801描述: NCS8801S是一种低功耗的RGB/LVDS到显示端口/eDP转换器,专为智能手机、平板电脑、笔记本电脑等移动设备而设计。以支持高清DP/eDP显示器。NCS8801S支持4车道DP/eDP输出,这通常需要以60Hz的帧率支持QXGA(2048*1536&am…

数据可视化作业二:中国城市地铁数据可视化

目录 作业要求 一、绘制每个城市站点数量柱状图(降序排列) 1.1 每个城市站点数量统计 1.1.1 代码展示 1.1.2 统计结果展示 1.2 柱状图绘制 1.2.1 代码实现 1.2.2 绘制结果 二、绘制上海市地铁线路站点数饼状图 2.1 数据处理 2.2 代码实现 2.3…

RabbitMQ详解-06RabbitMQ高级

1. 过期时间TTL 可以对消息设置预期的时间,在这个时间内都可以被消费者接收获取;过了之后消息自动被删除。RabbitMQ可以对消息和队列设置TTL。有以下两种设置方法: 通过队列属性设置,队列中所有消息都有相同的过期时间。对消息进…

STM32学习笔记(六)--引脚重映射详解

STM32F103C8T6引脚定义: 在STM32微控制器中,外设引脚的复用功能(Alternate Function,AF)有时会出现冲突,例如当USART2_CTS和TIM2_CH1同时需要使用相同的引脚时。此时,可以通过引脚重映射功能&am…

AI播客下载:The Gradient-AI前沿见解

The Gradient 是一个致力于让更多人轻松了解人工智能,并促进人工智能社区内讨论的组织。我们目前开展的项目包括 The Gradient 杂志、The Gradient 播客、The Update 通讯以及 Mastodon 实例 Sigmoid Social。 我们是一个由来自不同机构和公司的研究生、研究人员及…

三十分钟学会RabbitMQ

1、初识MQ 1.1 MQ是什么? MQ(message queue),从字面意思上看,本质是个队列,FIFO先入先出,只不过队列中存放的内容是message而已,还是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中…

Wills Room Environment Dormitory Room Environment

有126个独特的网格。包括所有展示的资产和优质资产。具有良好的细节水平,并针对Gameready项目进行了优化。 艺术家Jonjo Hemmens创造的环境 如果想填充你的游戏环境或任何类型的虚拟制作级别,这里有一个包,你可以获得并使用它来得到高质量的视觉效果和优化的资产。 下载:​…

Unicorn批量模拟执行爆破实践

实践题目:CFI-CTF 2018 Automated Reversing 代码与附件地址:https://github.com/Airrcat/unicorn_loader 目标附件如: 每份附件的代码大致如下: 简单来说,程序会接收命令行参数并作一个字节的运算后与一固定值的字…

转型技术管理:九大步骤解锁高效管理新境界

文章目录 引言一、寻求反馈二、从员工的角度看待问题三、总览全局四、管理自己的情绪五、赞赏员工的出色工作六、在人前支持员工七、管理自己的职业生涯八、认识到自己也许存在偏见,与不同于自己的人交流九、在工作中建立信任和沟通总结 引言 在快速变化的科技浪潮…

SparkSQL的分布式执行引擎-Thrift服务:学习总结(第七天)

系列文章目录 SparkSQL的分布式执行引擎 1、启动Thrift服务 2、beeline连接Thrift服务 3、开发工具连接Thrift服务 4、控制台编写SQL代码 文章目录 系列文章目录前言一、SparkSQL的分布式执行引擎(了解)1、启动Thrift服务2、beeline连接Thrift服务3、开发工具连接Thrift服务4、…

opencascade AIS_InteractiveContext源码学习相关枚举 AIS_SelectionScheme AIS_StatusOfPick

AIS_SelectionScheme 枚举 AIS_SelectionScheme 设置交互上下文中的选择方案。 枚举值: AIS_SelectionScheme_UNKNOWN 未定义的方案 AIS_SelectionScheme_Replace 清除当前选择并选择检测到的对象 AIS_SelectionScheme_Add 将检测到的对象添加到当前选择 AIS_…

【Kubernetes项目部署】k8s集群+高可用、负载均衡+防火墙

项目架构图 (1)部署 kubernetes 集群 详见:http://t.csdnimg.cn/RLveS (2) 在 Kubernetes 环境中,通过yaml文件的方式,创建2个Nginx Pod分别放置在两个不同的节点上; Pod使用hostP…

智慧学习实践系统的设计

管理员账户功能包括:系统首页,个人中心,企业管理,任务管理,公告管理,菜单管理,用户管理,基础数据管理 企业账户功能包括:系统首页,个人中心,任务…

电商API接口详述:涵盖订单、库存等多功能接口介绍

电商商家自研管理系统,线下ERP系统或WMS系统想要接入电商平台订单打单发货,通过点三电商API可以一键对接多个电商平台,帮助商家、ERP/WMS服务商快速开发电商模块,实现电商业务管理功能,那么点三电商API接口有哪些可用接…

省市区下拉选择:3个el-select(附完整代码+json)

目录 直接上做出的效果: 页面代码: 使用click.native: data及引入: 初始化: methods: JSON: 示例结构: 1.code.json 2.pca-code.json 回显: 视频效果: 直接上做出…

盘点下常见 HDFS JournalNode 异常的问题原因和修复方法

盘点下常见 HDFS JournalNode 异常的问题原因和修复方法 最近在多个客户现场以及公司内部环境,都遇到了因为 JournalNode 异常导致 HDFS 服务不可用的问题,在此总结下相关知识。 1 HDFS HA 高可用和 JournalNode 概述 HDFS namenode 有 SPOF 单点故障…

MS3121地隔离放大器

MS3121 是一款应用于车载音频系统的地隔离放大 器。芯片可以很好地解决汽车音频系统中的绕线电阻问 题,以及由车载电子设备带来的噪声问题。另外,芯片 所需要的外围电容小,便于系统的集成。注意,芯片的 地电位需要和后级音频功…

Mac数据如何恢复?3 款最佳 Mac 恢复软件

如果您认为 Mac 上已删除的文件永远丢失了,那您就大错特错了!实际上,即使您清空了 Mac 上的垃圾箱,也有许多解决方案可以帮助您恢复已删除的文件。最好的解决方案之一是 Mac 恢复删除软件。最好的Mac 恢复删除应用程序可以轻松准确…

docker部署ClamAV集成java和python实现文件病毒扫描

介绍 官方文档:https://docs.clamav.net/manual/Signatures/DatabaseInfo.html ClamAV 是一个开源的反病毒引擎,它由多个模块组成,负责不同的任务处理。以下是 ClamAV 的主要模块和它们的功能: clamd:clamd 是 Clam…