在《从 0 到 1 数据库实践教程》前面的内容中,相信你已经学习到了 SQL 引擎的基础知识,对 SQL 在各模块间的流动也有了整体的认知。在 SQL 引擎包含的模块中,SQL 执行引擎作为其最终落地的“手脚”,负责执行优化器给予的执行计划,通过存储引擎读取数据并进行处理后,将结果返回给客户端。因此,执行引擎能够直接影响 SQL 的执行性能。
9月10日 19:30 内核实战教程第五期,将带你了解 SQL 执行引擎的基本理论知识及 OceanBase 的执行引擎实现。
你可以深入了解一款企业级分布式数据库如何实现执行引擎的高性能,以及如何做到毫秒级的增删改查。
通过本期 OceanBase 执行引擎实现过程的学习,对于想参加 OceanBase 数据库大赛及想从事 SQL 层研发的同学都会有很大的帮助。
本期能帮你解决什么问题?
1.OceanBase 作为企业级原生分布式数据库,并行执行能力是如何实现的;
2.OceanBase是如何实现向量化执行引擎的;
3.MiniOB 实战手把手系列之 MiniOB Date 类型实现解析。
直播内容抢“鲜”知
在第四期教程中,你已经了解了 SQL 引擎的各个知识点,我们知道查询优化器将 SQL 语句解析并从执行计划中选择最低消耗的执行计划后,具体的执行就会交由执行引擎,那么 SQL 执行引擎如何设计与实现呢?
本期内容通过介绍 OceanBase 的 SQL 执行引擎的实现,为你详细讲解。
OceanBase 的 SQL 执行引擎经过多年演进。传统的火山模型,由单行迭代执行演进为向量化执行,极大地提升了单核执行能力。同时,由于其具备 SQL 并行执行的能力,可以充分利用系统资源并行处理用户请求,从而降低 RT。
图1 OceanBase SQL执行引擎演进历程
从图 1 可见,OceanBase 第二代执行引擎延续了传统的火山模型,数据按行迭代,但对旧的执行引擎进行了重写。新的实现引入了强类型计算,执行内存预分配,使用表达式列表描述行信息,将静态的 meta 信息与数据分离,重新实现了表达式及算子计算框架,执行性能相比第一代执行引擎大幅提升。
而从第二代的数据按行迭代到第三代向量化处理逻辑,产生了极大的优化。由于OceanBase 的用户场景除 OLTP 类的简略查询外,还有报表剖析、业务决策等 OLAP 查询。而 OLAP 查询的数据处理量大、耗时高,传统的按行迭代模型每行都需要迭代一次,导致虚函数调用开销比较大,同时 cache 友好性也较差。
为解决该问题, OceanBase 实现了向量化引擎。效果也很显著,在 TPC-H 30T 场景,向量化引擎的性能是非向量化的近 3 倍,对于 Q1 这种聚合剖析且计算密集的 SQL 查询,性能提升约 10 倍。本次教程还会为你具体介绍更多 OceanBase 向量化实现细节。
图2 OceanBase 执行引擎之单行执行
图3 OceanBase 执行引擎之向量化执行
对于 OLAP 场景的 SQL 请求,需要分析大量用户数据,并且用户往往期望能够尽快给出结果,单核串行执行能力是有限的。
为了能够尽快跑出结果,充分利用系统资源并行执行是关键。OceanBase 很早就实现了并行执行能力,可以支持大规模高并发处理,充分利用集群机器资源,在 TPC-H 30T 标准测试场景中,我们用 64 台机器的 5120 个 CPU 超线程,同时去服务每一个用户请求,把本来需要几十分钟才能完成的请求在几秒内处理完。
图4 OceanBase 执行引擎之并行执行框架
OceanBase 是 Share Noting 的分布式数据库架构,并行执行可以满足 AP 场景(数据量大,处理时间长)下对单个请求并发处理需求,但对于 TP 场景(耗时短,用户 QPS 高), 一个 SQL 请求耗时可能只有几个 ms 甚至几百 us , 一般都是串行执行(并行执行调度等开销相对 TP 耗时较大)。
为了能够在分布式场景下高效处理 TP 场景请求,OceanBase 提供了多种执行模式,包括本地执行、远程执行、DAS 执行。
图5 OceanBase 执行引擎的多种执行模式
当前,OceanBase SQL 执行引擎能够很好地满足用户对 HTAP 执行能力的需求,未来我们还将面向列存及新硬件进一步优化执行引擎能力。
更多详细内容,敬请关注 9月10日 19:30 「从 0 到 1 数据库实践教程」官方课程。
课程回放链接:
https://open.oceanbase.com/course/641
赶快扫描下方二维码进入「从 0 到 1 数据库实践教程学习交流」群,关注课程动态,和更多小伙伴一起学习进步!
此外,全国大学生计算机系统能力大赛—2025 OceanBase 数据库大赛报名正在火热进行中,可提前报名大赛,通过赛前教程的学习提前准备哟~
点击阅读原文,报名数据库大赛!

