表达式的 JIT 编译
本主题介绍如何在 StarRocks 中为表达式启用和配置 JIT 编译。
概述
即时编译 (JIT) 是指在运行时生成机器代码并执行它。与解释器相比,JIT 编译器可以显着提高最常用代码部分的执行效率。 StarRocks 支持对某些复杂表达式进行 JIT 编译,从而实现成倍的性能提升。
用法
从 v3.3.0 开始,StarRocks 默认对内存限制(由 BE 配置项 mem_limit
配置)大于或等于 16 GB 的 BE 节点启用 JIT 编译。 由于 JIT 编译会消耗一定的内存资源,因此默认情况下对内存小于 16 GB 的 BE 节点禁用 JIT 编译。
您可以使用以下参数启用和配置表达式的 JIT 编译。
jit_lru_cache_size(BE 配置)
- 默认值:0
- 类型:Int
- 单位:字节
- 是否可变:是
- 描述:JIT 编译的 LRU 缓存大小。 它表示缓存的实际大小(如果设置为大于 0)。 如果将其设置为小于或等于 0,则系统将使用公式
jit_lru_cache_size = min(mem_limit*0.01, 1GB)
自适应地设置缓存(同时节点的mem_limit
必须大于或等于 16 GB)。 - 引入版本:-
jit_level(系统变量)
- 描述:启用表达式 JIT 编译的级别。 有效值
1
:系统自适应地为可编译表达式启用 JIT 编译。-1
:为所有可编译的非常量表达式启用 JIT 编译。0
:禁用 JIT 编译。 如果此功能返回任何错误,您可以手动禁用它。
- 默认值:1
- 数据类型:Int
- 引入版本:-
功能支持
支持的表达式
+
,-
,*
,/
,%
,&
,|
,^
,>>
,<<
- 使用 CAST 进行数据类型转换
- CASE WHEN
=
,!=
,>
,>=
,<
,<=
,<=>
AND
、OR
、NOT
支持的运算符
- 用于过滤的 OLAP Scan Operator
- Projection Operator
- 用于表达式的 Aggregate Operator
- HAVING
- 用于表达式的 Sort Operator
支持的数据类型
- BOOLEAN
- TINYINT
- SMALLINT
- INT
- BIGINT
- LARGEINT
- FLOAT
- DOUBLE