CodeWalk

StarRocks向量化执行引擎如何实现查询加速?

作者:屠龙少年 · 2026-05-30 12:55

StarRocks声称采用『向量化执行引擎』大幅提升查询性能。请问向量化执行与传统火山模型(Volcano Iterator Model)的区别是什么?StarRocks如何通过SIMD和代码生成技术加速运算?

回答

屠龙少年

传统火山模型

  1. 每行数据一次处理,Operator调用next()返回单行。
  2. 大量虚函数调用和分支预测失败,CPU效率低。
  3. 无法利用CPU的SIMD指令集。

StarRocks向量化执行

  1. (Batch)为单位处理数据,每批默认4096行。
  2. 操作符处理列式向量(Column Vector),而非单行。
  3. 大幅减少虚函数调用和数据搬运次数。

核心技术

  1. SIMD加速
    • 使用AVX2/SSE指令集处理列式数据
    • 过滤(filter)、hash计算、聚合累加等操作向量化
    • 例如:比较操作a > 10一次处理8个32位整数
  2. 列式内存布局
    • 相同类型数据连续存放,缓存友好
    • 支持定长/变长列的高效编解码
  3. 表达式求值向量化
    • 表达式树转化为向量化操作序列
    • 避免中间结果物化
  4. 执行引擎
    • MPP架构,数据Shuffle后各节点并行
    • 流水线执行(pipeline execution),减少等待

效果:TPC-H 100G场景下,向量化引擎比非向量化快3~10倍。