与MySQL DDL 对比分析OceanBase DDL的实现

本文将简要介绍OceanBase的DDL实现方式,并通过与MySQL DDL实现的对比,帮助大家更加容易理解。

MySQL DDL 的算法

MySQL 的DDL实现算法主要有 copy、inplace和instant。

copy

copy算法的实现相对简单,MySQL首先会创建一个临时表,随后将源表的所有数据复制到这个临时表中。在数据复制的过程中,源表将无法进行数据写入操作。待临时表的数据写入完成后,MySQL会用这个临时表来替换原有的源表。

copy 算法会对表进行锁定,所以该种算法下的DDL属于Offline DDL,在执行DDL的时候,不能并发写操作,并且因为是copy数据,所以速度也相对较慢。

inplace

inplace 算法属于 Online DDL,根据是否需要重建表,又分为了rebuild 和 no-rebuild。

no-rebuild 不需要重建表,只需要修改表的元数据,所以速度很快。

rebuild 是需要重建表的,虽然不会创建临时表,但是实际底层的实现还是会创建新的 ibd 文件最后切换,相当于物理文件的“copy”。这个操作是 Online的,但并不是说不会锁表,其实中间会经历两次MDL 写锁,会影响写操作,只不过因为持有时间非常短,所以业务基本无感知。

instant

对于一些inplace需要重建表的操作,可以通过instant来实现快速执行,因为它只需要修改数据数据字典中的内容而不再需要重建表,最典型的就是立刻加列。立刻加列完成后,当需要查询表中数据时,会将新增列的默认值追加到读取的数据后面并返回。

当然,在实际业务中,大部分的MySQL DDL操作都是原生+工具结合的方式来做的,支持
no-rebuild和instant的DDL使用原生,其他的DDL则使用工具,比如 pt-osc、gh-ost。

OceanBase的DDL实现

OB的DDL包括 Online DDL 和 Offline DDL,其中 Online DDL 不影响读写,Offline DDL会堵塞写操作,直至DDL完成,这期间读操作不受影响。

Offline DDL

OB 的 Offline DDL 使用的是两表双写的方案

两表双写方案的思路是新建一张临时的隐藏表格(对用户不可见)用于双写,同时在后台将原表的数据补全到新建的临时表格中,然后将原表重命名为一个另外的临时表格,将补全数据的临时表格重命名为原表原来的名字,最后将原表的删除。

  1. 用户发起对 Src Table (T1) 的DDL操作;
  2. 停读写并新建隐藏表:停读写,新建一张隐藏表 Temp Table(T2),T2 是基于 T1 做 DDL得到的Schema,假设此时的Schema Version为S1
  3. 等事务结束:等待表格 T1 的所有分区上使用过比Schema Version S1小的事务都结束,获取一个快照点
  4. 主表补全:基于步骤3上获取的快照点,扫描表 T1 的数据,按照 T2 的Schema形式排序并写入表 T2
  5. 依赖对象数据重建:重建索引表、约束等
  6. 表名切换:将T1命名为T3,T2命名为T1,假设此时Schema Version S2
  7. 写Barrier日志:每个分区独立处理写Barrier日志
  8. 恢复读写:允许新表格上的读写
  9. 删除原表:将表T3删除

从上面的流程可以看出来,Offline DDL 的实现其实跟 MySQL 的 COPY 方式实现原理非常的像,不过OB因为是分布式数据库,所以会加入很多分布式数据库的元素以及保障,并且底层做了很多性能的优化。

Online DDL

Online DDL 主要有两种,原表上操作,比如列重命名,基本上只需要修改元数据信息,这个操作会非常的快;如果是新增索引的操作,是需要重整非原表数据的,具体的耗时跟表的数据量成正比。

拿创建全局索引流程来举例:

简单来说会在创建索引开始时,拿到一个快照点,根据当前快照获取存量数据,并且排序并生成索引。全量数据获取完成后,获取增量数据,最后改成一个可读可写的状态,然后这个索引就可以用来做查询优化了。

建索引因为是ONLINE 操作,所以执行过程中是不会堵塞读写操作的。

当前版本支持的Online DDL 和 Offline DDL

下面支持的操作对应的版本是 OceanBase v4.2.2 社区版本。

Online DDL操作:

Offline DDL操作:

DDL 执行以及进度查询

DDL 语法跟MySQL是完全相同的,这里就不过多赘述了。

查看DDL进度

OB 提供了实时 DDL 进度展示功能,通过查询 GV$SESSION_LONGOPS 视图,可以展示 DDL 操作的执行状态和进度。

mysql> select * from oceanbase.gv$session_longops\G;

各个字段含义:

  • sid:现在没有填值,为默认的 -1。
  • trace_id: OBServer 程序日志的ID,可以用该ID来搜索相关的日志文件。
  • opname:建索引时,会展示 create index 信息。
  • target:建索引时,展示正在创建的索引名。
  • svr_ip: 调度任务在哪个 OBServer 执行。
  • svr_port:调度任务在哪个 OBServer 执行。
  • start_time:索引构建开始时间,这里只精确到日期,跟 Oracle 是兼容的。
  • elapsed_seconds: 索引构建执行的时间,单位为秒。
  • time_remaining: 兼容 Oracle 的字段,暂时还没有实现剩余时间预测的能力。
  • last_update_time: 统计信息收集的时间,也是精确到日期,跟 Oracle 是兼容的。
  • message:里面包含了多个信息,ENANT_ID为租户 ID,TASK_ID为DDL 的任务 ID,STATUS 为 DDL 执行到的状态,REPLICA BUILD 指的是数据补全阶段,索引数据补全主要分为扫描主表数据,排序,写入到索引表阶段,三个阶段处理的行数分别对应于ROW_SCANNED, ROW_SORTED 和 ROW_INSERTED,因排序阶段可能会进行多轮归并,所以ROW_SORTED 的行数通常比 ROW_SCANNED 和 ROW_INSERTED 要多。

写在最后

OceanBase因为是分布式数据库,所以DDL其实还设计很多分布式相关的底层逻辑实现,比如多副本如何调度、主备库怎么同步等等,这里就不详细介绍了。如果大家想要了解更详细的细节,可以到OceanBase官网或者问答区咨询。

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

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

相关文章

C++:STL

STL 文章目录 STLSTL 绪论迭代器(iterators)容器(Containers)vectorset,multisetmap,multimapstackqueuedequepriority_queuebitset 算法(Algorithms)sort,count,find,lower_bound,upper_bound,binary_sear…

(2024,attention,可并行计算的 RNN,并行前缀扫描)将注意力当作 RNN

Attention as an RNN 公众号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群) 目录 0. 摘要 3. 方法 3.1 注意力作为一种(多对一的)RNN 3.2 注意力作为(多对多&…

多语言印度红绿灯系统源码带三级分销代理功能

前端为2套UI,一套是html写的,一套是编译后的前端 后台功能很完善,带预设、首充返佣、三级分销机制、代理功能。 东西很简单,首页就是红绿灯的下注页面,玩法虽然单一,好在不残缺可以正常跑。

Putty: 随心御剑——远程启动服务工具plink

一、引言:如何远程控制 也许你会有这样的场景,交互程序(以下简称UI程序)跑在windows端,而控制程序跑在Linux上。我们想要通过windows端 UI程序来启动Linux下面的服务,来一场酣畅淋漓的御剑飞行咋办,难道要自己十年磨一剑,在Linux下编写一个受控服务程序么.计算机科技发…

【MATLAB】信号的熵

近似熵、样本熵、模糊熵、排列熵|、功率谱熵、奇异谱熵、能量熵、包络熵 代码内容: 获取代码请关注MATLAB科研小白的个人公众号(即文章下方二维码),并回复信号的熵本公众号致力于解决找代码难,写代码怵。各位有什么急需…

FreeRTOS中断中释放信号量

串口接收:中断程序中逆序打印字符串 串口接收:逆序回环实验思路 注:任务优先级较高会自动的切换上下文进行运行 FreeRTOS中的顶半操作和底半操作 顶半操作和底半操作“这种叫法源自与Linux”在嵌入式开发中,为了和Linux操作系统做…

Linux网络编程: 网络基础

Linux网络编程: 网络基础 1.网络划分 一.网络通信1.网络通信和本地通信的联系2.网络通信与本地通信最本质的区别及其衍生出的问题 二.网络协议初识1.为何本地通信不行?2.打电话的例子体会分层模型的好处3.OSI七层模型的提出4.OSI七层模型与TCP/IP五层模型1.TCP/IP与…

二十九篇:构建未来:信息系统的核心框架与应用

构建未来:信息系统的核心框架与应用 1. 引言 在这个充满挑战和机遇的信息时代,信息系统已经成为现代组织不可或缺的神经中枢。它们不仅革新了我们处理信息的方式,更是极大地增强了决策制定的效率和质量。在这篇文章中,我将分享我…

Java进阶-SpringCloud使用BeanUtil工具类简化对象之间的属性复制和操作

在Java编程中,BeanUtil工具类是一种强大且便捷的工具,用于简化对象之间的属性复制和操作。本文将介绍BeanUtil的基本功能,通过详细的代码示例展示其应用,并与其他类似工具进行对比。本文还将探讨BeanUtil在实际开发中的优势和使用…

5.26牛客循环结构

1002. 难点: 两层循环条件设置 思路 可以设置三个变量 代码 1003 思路: 与星号双塔差不多,在此基础上加大一点难度 每日练题5.23 (EOF用法)-CSDN博客 代码 1004 代码

Android Compose 八:常用组件 Switch

Switch 切换按钮 val isChecked remember { mutableStateOf(true) }Switch(checked isChecked.value,onCheckedChange {Log.i("text_compose","onCheckedChange>>"it)isChecked.value it})效果 默认颜色 应该对应 主题色 1.1 thumbContent 按钮…

Python Beautiful Soup 使用详解

大家好,在网络爬虫和数据抓取的领域中,Beautiful Soup 是一个备受推崇的 Python 库,它提供了强大而灵活的工具,帮助开发者轻松地解析 HTML 和 XML 文档,并从中提取所需的数据。本文将深入探讨 Beautiful Soup 的使用方…

vue项目打包教程

如果是用 vue-cli 创建的项目,则项目目录中没有 config 文件夹,所以我们需要自建一个配置文件;在vue项目目录下创建文件 vue.config.js,需注意文件名称必须是 vue.config.js,然后在文件中插入以下代码: 文件…

我让gpt4o给我推荐了一千多次书 得到了这些数据

事情是这样的,我们公司不是有个读书小组嘛,但是今年大家都忙于工作,忽视了读书这件事,所以我就想着搞个群机器人,让它明天定时向群里推荐一本书,用来唤起大家对读书的兴趣。但在调试的过程中就发现gpt4o老喜…

齿轮常见故障学习笔记

大家好,这期咱们聊一聊齿轮常见的失效形式,查阅了相关的资料,做个笔记分享给大家,共同学习。 介绍 齿轮故障可能以多种方式发生。如果在设计阶段本身就尽量防止这些故障的产生,则可以产生改更为优化的齿轮设计。齿轮…

pytest框架用例命名规则详解

pytest 测试用例的命名规则是为了确保 pytest 能够正确地识别和执行测试用例。 以下是关于 pytest 测试用例命名规则的详细解释: 1 单个测试文件以‘test_’开头或者以‘_test’结尾 比如我们创建test_case1.py case2_test.py文件。 2 单个测试文件中&#xff0c…

58. UE5 RPG AI行为树的装饰器

书接56. UE5 RPG 给敌人添加AI实现跟随玩家,我们实现了AI一些基础设置,并实现了获取敌人附近的玩家实现了跟随功能 接下来,我们将实现区分职业,并根据职业不同设置不同的攻击距离,并且根据职业实现不同的技能施放。 …

《Effective Objective-C 2.0》读书笔记——对象、消息、运行期

目录 第二章:对象、消息、运行期第6条:理解“属性”这一概念第7条:在对象内部尽量直接访问实例变量第8条:理解“对象等同性”这一概念第9条:以“类族模式”隐藏实现细节第10条:在既有类中使用关联对象存放自…

App推广新境界:Xinstall助你轻松突破运营痛点,实现用户快速增长!

在移动互联网时代,App已经成为企业营销不可或缺的一部分。然而,如何有效地推广App,吸引并留住用户,成为了众多企业面临的难题。今天,我们将为您揭秘一款神奇的App推广工具——Xinstall,它将助您轻松突破运营…

绘唐3模型怎么放本地sd安装及模型放置位置 及云端sd部署

绘唐3模型怎么放本地sd安装及模型放置位置 及云端sd部署 资料里面授权方式: https://qvfbz6lhqnd.feishu.cn/wiki/CcaewIWnSiAFgokOwLycwi0Encf 云端和模型之间存在某种关联性。云端通常用于存储和管理大量数据,并提供计算和资源的服务。模型是对数据进…