AnalyticDB是阿里云企业级云原生数据仓库,在GreenPlum和PostgreSQL基础上开发的。语法上对两者保持兼容,功能层面上为GP超集。其架构:
这里重点关注他的向量化引擎。PG的执行引擎是Record-Oriented的火山模型,也就是面向行。ADB自研了Block-Oriented向量化执行引擎。
对于Record-Oriented通过getNext()接口每次获取一个记录,Block-Oriented模式下通过getNextBlock()接口一次获取一批记录,同时每个算子综合运用向量化和即时编译技术,对这一批记录执行相同处理逻辑,从下面的收益出发,获得更高效的资源利用,从而使执行更快:
1)每行读取和使用相同逻辑处理一批记录,能获得更高的CPU指令和数据缓存命中率
2)从一次函数调用处理一条记录到一次函数调用处理一批数据,同时即时编译则直接避免函数调用,总体函数调用次数和开销减少。
3)内存的分配和回收,也从每条记录的分配回收,到每批记录的分配和回收,整体减少内存分配回收次数和碎片管理的开销
4)在按批处理模型下,代码实现能更好地以向量化方式实现,一方面有利于CPU进行数据预取,另一方面尽可能减少程序的条件跳转,从CPU获得更好的指令流水线执行,同时也有利于编译器生成SIMD指令提高执行效率
其宣讲稿中展示了向量化分组聚合场景:
向量化按批读取和处理的行为在本批次中让需要处理的数据和指令都驻留在CPU的L1/L2 Cache中,在缓存命中情况下性能为从内存读取的10-30倍。同时对该批次数据进行相同指令的处理,也能让CPU更好地流水线执行,减少CPU Hazards。即时编译代码生成针对表达式处理场景,直接避免了解释执行模式下高频函数调用。