数据库执行器初探

2023-10-29 database

简介

在 1994 年发表的 Volcano Model 论文中,提出了基于行的流式迭代模型,首先会从上到下发起拉取数据请求,然后数据从下往上返回,默认会一行一行返回,不过部分会优化为小批。

SQL Execution

这样可以简单抽象一系列标准接口,各个运算符可以充分解耦,易于扩展、实现,在数据量不太大的 TP 中还在使用;但需要大量调用 next() 函数,对分支预测不友好,破坏 CPU 流水线、Cache、TLB 失效等,导致在 AP 上效率很低。

于是,就有了 Vectorization 和 Compilation 两大优化方向,各自代表分别为 MonetDB (2005) 以及 Compiling Query Plan (2011) 两篇论文。进而,讨论如何充分利用硬件的特性,包括 Sort vs. Hash (2013) 对比 HashJoin 和 MergeJoin 实现性能,如何利用 SIMD 指令提升 SQL 算子性能,以及 Morsel 讨论如何适配 NUMA 架构等。

参考