21 | 查询执行引擎:如何让聚合计算加速?
王磊
该思维导图由 AI 生成,仅供参考
你好,我是王磊。
在 19、20 两讲中,我已经介绍了计算引擎在海量数据查询下的一些优化策略,包括计算下推和更复杂的并行执行框架。这些策略对应了从查询请求输入到查询计划这个阶段的工作。那么,整体查询任务的下一个阶段就是查询计划的执行,承担这部分工作的组件一般称为查询执行引擎。
单从架构层面看,查询执行引擎与分布式架构无关,但是由于分布式数据库要面对海量数据,所以对提升查询性能相比单体数据库有更强烈的诉求,更关注这部分的优化。
你是不是碰到过这样的情况,对宽口径数据做聚合计算时,系统要等待很长时间才能给出结果。那是因为这种情况涉及大量数据参与,常常会碰到查询执行引擎的短板。你肯定想知道,有优化办法吗?
当然是有的。查询执行引擎是否高效与其采用的模型有直接关系,模型主要有三种:火山模型、向量化模型和代码生成。你碰到的情况很可能是没用对模型。
火山模型
火山模型(Volcano Model)也称为迭代模型(Iterator Model),是最著名的查询执行模型,早在 1990 年就在论文“Volcano, an Extensible and Parallel Query Evaluation System”中被提出。主流的 OLTP 数据库 Oracle、MySQL 都采用了这种模型。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
查询执行引擎在海量数据查询下的优化策略至关重要。本文介绍了查询执行引擎的模型和优化方法,包括火山模型、向量化模型和代码生成。火山模型通过迭代器实现查询计划的执行,但存在虚函数调用次数过多和不利于发挥现代CPU特性的缺点。为了优化火山模型,可以采用运算符融合等方法。另一种优化思路是向量化模型,通过向量化运算符基于列来重写查询处理算法,充分利用CPU,提升性能。TiDB和CockroachDB的实践表明,向量化模型可以显著提升性能,达到数倍甚至数十倍的提升。这些优化方法对于加速聚合计算等查询任务具有重要意义,尤其在面对海量数据时更为关键。另外,代码生成作为另一种高效查询执行引擎,通过即时编译生成代码可以达到类似手写代码的效果,极大地提高了CPU的执行效率。向量化和代码生成是两种高效查询模型,它们在分布式数据库领域得到了广泛的实践,并在TiDB、CockroachDB和OceanBase等数据库中得到了应用。这些优化方法和技术的应用,使得查询执行引擎能够更好地发挥现代CPU的特性,从而提升查询性能。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《分布式数据库 30 讲》,新⼈⾸单¥59
《分布式数据库 30 讲》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(7)
- 最新
- 精选
- Jxin感觉代码生成==编译器运行期优化。 1.针对循环做优化 2.减少过程调用开销 3.对控制流做优化 4.向量计算
作者回复: 总结的很好。
2020-09-254 - 幼儿编程教学请教老师。向量计算,是否可以理解成,本来是一行一行数据计算,现在向量,就变成多行,一个矩阵。本质就是批量一起处理。不知道理解的对不对,望指点。2020-11-2611
- xxx最后的代码生成应该属于 Materialization Model。用代码生成只是一种优化手段,用来尽量减少函数调用开销以及多余的物化操作。2023-12-18归属地:江苏
- 勿更改任何信息思考题: 如redis,硬件升级内存扩大使得内存数据库出现2021-07-10
- 扩散性百万咸面包请教老师。看过内核代码,每个Operator会调用子Operator的Next接口,为什么这是虚函数调用呢?不是普通函数调用吗?2021-01-12
- 崔伟协火山模型怎么处理聚合如max, min,sum这些2020-09-29
- 扩散性百万咸面包老师,这里有个问题,既然MySQL等用了火山模型,那它们为什么不改成向量化接口呢?既然提升如此明显? 感觉向量化就是把多个tuple一次返回,向量化和行式存储结合的难点在哪呢?2020-09-252
收起评论