StarRocks向量化执行引擎如何实现查询加速?
StarRocks声称采用『向量化执行引擎』大幅提升查询性能。请问向量化执行与传统火山模型(Volcano Iterator Model)的区别是什么?StarRocks如何通过SIMD和代码生成技术加速运算?
回答
屠龙少年
传统火山模型:
- 每行数据一次处理,Operator调用next()返回单行。
- 大量虚函数调用和分支预测失败,CPU效率低。
- 无法利用CPU的SIMD指令集。
StarRocks向量化执行:
- 以批(Batch)为单位处理数据,每批默认4096行。
- 操作符处理列式向量(Column Vector),而非单行。
- 大幅减少虚函数调用和数据搬运次数。
核心技术:
- SIMD加速:
- 使用AVX2/SSE指令集处理列式数据
- 过滤(filter)、hash计算、聚合累加等操作向量化
- 例如:比较操作
a > 10一次处理8个32位整数
- 列式内存布局:
- 相同类型数据连续存放,缓存友好
- 支持定长/变长列的高效编解码
- 表达式求值向量化:
- 表达式树转化为向量化操作序列
- 避免中间结果物化
- 执行引擎:
- MPP架构,数据Shuffle后各节点并行
- 流水线执行(pipeline execution),减少等待
效果:TPC-H 100G场景下,向量化引擎比非向量化快3~10倍。