系统变量
StarRocks 提供多个系统变量(system variables),方便您根据业务情况进行调整。本文介绍 StarRocks 支持的变量。您可以在 MySQL 客户端通过命令 SHOW VARIABLES 查看当前变量。也可以通过 SET 命令动态设置或者修改变量。您可以设置变量在系统 全局 (global) 范围内生效、仅在当前会话 (session) 中生效、或者仅在单个查询语句中生效。
StarRocks 中的变量参考 MySQL 中的变量设置,但部分变量仅用于兼容 MySQL 客户端协议,并不产生其在 MySQL 数据库中的实际意义。
说明
任何用户都有权限通过 SHOW VARIABLES 查看变量。任何用户都有权限设置变量在 Session 级别生效。只有拥有 System 级 OPERATE 权限的用户才可以设置变量为全局生效。设置全局生效后,后续所有新的会话都会使用新配置,当前会话仍然使用老的配置。
查看变量
可以通过 SHOW VARIABLES [LIKE 'xxx'];
查看所有或指定的变量。例如:
-- 查看系统中所有变量。
SHOW VARIABLES;
-- 查看符合匹配规则的变量。
SHOW VARIABLES LIKE '%time_zone%';
变量层级和类型
StarRocks 支持三种类型(层级)的变量:全局变量、Session 变量和 SET_VAR
Hint。它们的层级关系如下:
- 全局变量在全局级别生效,可以被 Session 变量和
SET_VAR
Hint 覆盖。 - Session 变量仅在当前会话中生效,可以被
SET_VAR
Hint 覆盖。 SET_VAR
Hint 仅在当前查询语句中生效。
设置变量
设置变量全局生效或在会话中生效
变量一般可以设置为全局生效或仅当前会话生效。设置为全局生效后,后续所有新的会话连接中会使用新设置的值,当前会话还会继续使用之前设置的值;设置为仅当前会话生效时,变量仅对当前会话产生作用。
通过 SET <var_name> = xxx;
语句设置的变量仅在当前会话生效。如:
SET query_mem_limit = 137438953472;
SET forward_to_master = true;
SET time_zone = "Asia/Shanghai";
通过 SET GLOBAL <var_name> = xxx;
语句设置的变量全局生效。如:
SET GLOBAL query_mem_limit = 137438953472;
以下变量仅支持全局生效,不支持设置为会话级别生效。您必须使用 SET GLOBAL <var_name> = xxx;
,不能使用 SET <var_name> = xxx;
,否则返回错误。
- activate_all_roles_on_login
- character_set_database
- default_rowset_type
- enable_query_queue_select
- enable_query_queue_statistic
- enable_query_queue_load
- init_connect
- lower_case_table_names
- license
- language
- query_cache_size
- query_queue_fresh_resource_usage_interval_ms
- query_queue_concurrency_limit
- query_queue_mem_used_pct_limit
- query_queue_cpu_used_permille_limit
- query_queue_pending_timeout_second
- query_queue_max_queued_queries
- system_time_zone
- version_comment
- version
Session 级变量既可以设置全局生效也可以设置 session 级生效。
此外,变量设置也支持常量表达式,如:
SET query_mem_limit = 10 * 1024 * 1024 * 1024;
SET forward_to_master = concat('tr', 'u', 'e');
设置变量在单个查询语句中生效
在一些场景中,可能需要对某些查询专门设置变量。可以使用 SET_VAR 提示 (Hint) 在查询中设置仅在单个语句内生效的会话变量。
当前,StarRocks 支持在以下语句中使用 SET_VAR
Hint:
- SELECT
- INSERT(自 v3.1.12 和 v3.2.0 起支持)
- UPDATE(自 v3.1.12 和 v3.2.0 起支持)
- DELETE(自 v3.1.12 和 v3.2.0 起支持)
SET_VAR
只能跟在以上关键字之后,必须以 /*+
开头,以 */
结束。
举例:
SELECT /*+ SET_VAR(query_mem_limit = 8589934592) */ name FROM people ORDER BY name;
SELECT /*+ SET_VAR(query_timeout = 1) */ sleep(3);
UPDATE /*+ SET_VAR(query_timeout=100) */ tbl SET c1 = 2 WHERE c1 = 1;
DELETE /*+ SET_VAR(query_mem_limit = 8589934592) */
FROM my_table PARTITION p1
WHERE k1 = 3;
INSERT /*+ SET_VAR(query_timeout = 10000000) */
INTO insert_wiki_edit
SELECT * FROM FILES(
"path" = "s3://inserttest/parquet/insert_wiki_edit_append.parquet",
"format" = "parquet",
"aws.s3.access_key" = "XXXXXXXXXX",
"aws.s3.secret_key" = "YYYYYYYYYY",
"aws.s3.region" = "us-west-2"
);
StarRocks 同时支持在单个语句中设置多个变量,参考如下示例:
SELECT /*+ SET_VAR
(
exec_mem_limit = 515396075520,
query_timeout=10000000,
batch_size=4096,
parallel_fragment_exec_instance_num=32
)
*/ * FROM TABLE;
支持的变量
本节以字母顺序对变量进行解释。带 global
标记的变量为全局变量,仅支持全局生效。其余变量既可以设置全局生效,也可设置会话级别生效。
activate_all_roles_on_login (global)
- 描述:用于控制是否在用户登录时默认激活所有角色(包括默认角色和授予的角色)。
- 开启后,在用户登录时默认激活所有角色,优先级高于通过 SET DEFAULT ROLE 设置的角色。
- 如果不开启,则会默认激活 SET DEFAULT ROLE 中设置的角色。
- 默认值:false,表示不开启。
- 引入版本:v3.0
如果要在当前会话中激活一个角色,可以使用 SET ROLE。
auto_increment_increment
- 描述:用于兼容 MySQL 客户端。无实际作用。
- 默认值:1
- 类型:Int
autocommit
- 描述:用于兼容 MySQL 客户端。无实际作用。
- 默认值:true
chunk_size
用于指定在查询执行过程中,各个节点传输的单个数据包的行数。默认一个数据包的行数为 4096 行,即源端节点每产生 4096 行数据后,打包发给目的节点。较大的行数,会在扫描大数据量场景下提升查询的吞吐率,但可能会在小查询场景下增加查询延迟。同时,也会增加查询的内存开销。建议设置范围 1024 至 4096。
big_query_profile_threshold
-
描述:用于设定大查询的阈值。当会话变量
enable_profile
设置为false
且查询时间超过big_query_profile_threshold
设定的阈值时,则会生成 Profile。NOTE:在 v3.1.5 至 v3.1.7 以及 v3.2.0 至 v3.2.2 中,引入了
big_query_profile_second_threshold
参数,用于设定大查询的阈值。而在 v3.1.8、v3.2.3 及后续版本中,此参数被big_query_profile_threshold
替代,以便提供更加灵活的配置选项。 -
默认值:0
-
单位:秒
-
类型:String
-
引入版本:v3.1
catalog(3.2.4 及以后)
- 描述:用于指定当前会话所在的 Catalog。
- 默认值:default_catalog
- 类型:String
- 引入版本:v3.2.4
cbo_decimal_cast_string_strict
- 描述:用于优化器控制 DECIMAL 类型转为 STRING 类型的行为。取值为
true
时,使用 v2.5.x及之后版本的处理逻辑,执行严格转换(按 Scale 截断补0
);取值为false
时,保留 v2.5.x 之前版本的处理逻辑(按有效数字处理)。默认值是true
。 - 默认值:true
- 引入版本:v2.5.14
cbo_enable_low_cardinality_optimize
- 描述:是否开启低基数全局字典优化。开启后,查询 STRING 列时查询速度会有 3 倍左右提升。
- 默认值:true
cbo_eq_base_type
- 描述:用来指定 DECIMAL 类型和 STRING 类型的数据比较时的强制类型,默认按照
VARCHAR
类型进行比较,可选DECIMAL
(按数值进行比较)。该变量仅在进行=
和!=
比较时生效。 - 类型:String
- 引入版本:v2.5.14
cbo_materialized_view_rewrite_related_mvs_limit
- 描述:用于指定查询在 Plan 阶段最多拥有的候选物化视图个数。
- 默认值:64
- 类型:Int
- 引入版本:v3.1.9, v3.2.5
enable_sync_materialized_view_rewrite
- 描述:是否启用基于同步物化视图的查询改写。
- 默认值:true
- 引入版本:v3.1.11,v3.2.5
enable_datacache_async_populate_mode
- 描述:是否使用异步方式进行 Data Cache 填充。系统默认使用同步方式进行填充,即在查询数据时同步填充进行缓存填充。
- 默认值:false
- 引入版本:v3.2.7
query_including_mv_names
- 描述:指定需要在查询执行过程中包含的异步物化视图的名称。您可以使用此变量来限制候选物化视图的数量,并提高优化器中的查询改写性能。此项优先于
query_excluding_mv_names
生效。 - 默认值:空字符串
- 类型:String
- 引入版本:v3.1.11,v3.2.5
query_excluding_mv_names
- 描述:指定需要在查询执行过程中排除的异步物化视图的名称。您可以使用此变量来限制候选物化视图的数量,并提高优化器中的查询改写性能。
query_including_mv_names
优先于此项生效。 - 默认值:空字符串
- 类型:String
- 引入版本:v3.1.11,v3.2.5
optimizer_materialized_view_timelimit
- 描述:指定一个物化视图改写规则可消耗的最大时间。当达到阈值时,将不再使用该规则进行查询改写。
- 默认值:1000
- 单位:毫秒
- 类型:Long
enable_materialized_view_text_match_rewrite
- 描述:是否启用基于文本的物化视图改写。当此项设置为
true
时,优化器将查询与现有的物化视图进行比较。如果物化视图定义的抽象语法树与查询或其子查询的抽象语法树匹配,则会对查询进行改写。 - 默认值:true
- 引入版本:v3.2.5,v3.3.0
materialized_view_subuqery_text_match_max_count
- 描述:指定系统比对查询的子查询是否与物化视图定义匹配的最大次数。
- 默认值:4
- 引入版本:v3.2.5,v3.3.0
enable_view_based_mv_rewrite
- 描述:是否为基于逻辑视图创建的物化视图启用查询改写。如果此项设置为
true
,则逻辑视图被用作统一节点进行查询改写,从而获得更好的性能。如果此项设置为false
,则系统将针对逻辑视图的查询展开变为针对物理表或物化视图的查询,然后进行改写。 - 默认值:false
- 引入版本:v3.1.9,v3.2.5,v3.3.0
enable_materialized_view_union_rewrite
- 描述:是否启用物化视图 UNION 改写。如果此项设置为 true,则系统在物化视图的谓词不能满足查询的谓词时,会尝试使用 UNION ALL 来补偿谓词。
- 默认值:true
- 引入版本:v2.5.20,v3.1.9,v3.2.7,v3.3.0
enable_materialized_view_plan_cache
- 描述:是否开启物化视图查询计划缓存,用于提高物化视图查询改写性能。默认值是
true
,即开启物化视图查询计划缓存。 - 默认值:true
- 引入版本:v2.5.13,v3.0.7,v3.1.4,v3.2.0,v3.3.0
follower_query_forward_mode
-
描述:用于指定将查询语句路由到 Leader FE 或 Follower FE 节点。
有效值:
default
: 将查询语句路由到 Leader FE 或 Follower FE 节点,取决于 Follower FE 节点的回放进度。如果 Follower FE 节点未完成回放,查询将会被路由至 Leader FE 节点。反之,查询会被优先路由至 Follower FE 节点。leader
: 将查询语句路由到 Leader FE 节点。follower
: 将查询语句路由到 Follower FE 节点。
-
默认值:default
-
类型:String
-
引入版本:v2.5.20,v3.1.9,v3.2.7,v3.3.0
character_set_database(global)
- 描述:StarRocks 数据库支持的字符集,当前仅支持 UTF8 编码(
utf8
)。 - 默认值:utf8
- 类型:String
connector_io_tasks_per_scan_operator
- 描述:外表查询时每个 Scan 算子能同时下发的 I/O 任务的最大数量。目前外表查询时会使用自适应算法来调整并发 I/O 任务的数量,通过
enable_connector_adaptive_io_tasks
开关来控制,默认打开。 - 默认值:16
- 类型:Int
- 引入版本:v2.5
connector_sink_compression_codec
- 描述:用于指定写入 Hive 表或 Iceberg 表时以及使用 Files() 导出数据时的压缩算法。有效值:
uncompressed
、snappy
、lz4
、zstd
、gzip
。 - 默认值:uncompressed
- 类型:String
- 引入版本:v3.2.3
count_distinct_column_buckets
- 描述:group-by-count-distinct 查询中为 count distinct 列设置的分桶数。该变量只有在
enable_distinct_column_bucketization
设置为true
时才会生效。 - 默认值:1024
- 引入版本:v2.5
default_rowset_type (global)
全局变量,仅支持全局生效。用于设置计算节点存储引擎默认的存储格式。当前支持的存储格式包括:alpha/beta。
default_table_compression
- 描述:存储表格数据时使用的默认压缩算法,支持 LZ4、Zstandard(或 zstd)、zlib 和 Snappy。如果您建表时在 PROPERTIES 设置了
compression
,则compression
指定的压缩算法生效。 - 默认值:lz4_frame
- 类型:String
- 引入版本:v3.0
disable_colocate_join
- 描述:控制是否启用 Colocate Join 功能。默认值为 false,表示启用该功能。true 表示禁用该功能。当该功能被禁用后,查询规划将不会尝试执行 Colocate Join。
- 默认值:false
disable_streaming_preaggregations (已弃用)
控制是否开启流式预聚合。默认为 false
,即开启。3.1 版本已弃用。
div_precision_increment
- 描述:用于兼容 MySQL 客户端,无实际作用。
- 默认值:4
- 类型:Int
enable_connector_adaptive_io_tasks
- 描述:外表查询时是否使用自适应策略来调整 I/O 任务的并发数。默认打开。如果未开启自适应策略,可以通过
connector_io_tasks_per_scan_operator
变量来手动设置外表查询时的 I/O 任务并发数。 - 默认值:true
- 引入版本:v2.5
enable_distinct_column_bucketization
-
描述:是否在 group-by-count-distinct 查询中开启对 count distinct 列的分桶优化。在类似
select a, count(distinct b) from t group by a;
的查询中,如果 group by 列 a 为低基数列,count distinct 列 b 为高基数列且发生严重数据倾斜时,会引发查询性能瓶颈。可以通过对 count distinct 列进行分桶来平衡数据,规避数据倾斜。该变量需要与
count_distinct_column_buckets
配合使用。您也可以通过添加
skew
hint 来开启 count distinct 列的分桶优化,例如select a,count(distinct [skew] b) from t group by a;
。 -
默认值:false,表示不开启。
-
引入版本:v2.5
enable_group_level_query_queue (global)
- 描述:是否开启资源组粒度的查询队列。
- 默认值:false,表示不开启。
- 引入版本:v3.1.4
enable_iceberg_metadata_cache
- 描述:是否缓存 Iceberg 表指针和分区名相关的数据。在 3.2.1 到 3.2.3 版本,该参数默认值统一为
true
。自 3.2.4 版本起,如果 Iceberg 集群的元数据服务为 AWS Glue,该参数默认值仍为true
,如果 Iceberg 集群的元数据服务为 Hive Metastore(简称 HMS)或其他,则该参数默认值变更为false
。 - 引入版本:v3.2.1
enable_insert_strict
- 描述:用于设置通过 INSERT 语句进行数据导入时,是否开启严格模式 (Strict Mode)。
默认值为
true
,即开启严格模式。关于该模式的介绍,可以参阅严格模式。 - 默认值:true
enable_materialized_view_for_insert
- 描述:是否允许 StarRocks 改写 INSERT INTO SELECT 语句中的查询。
- 默认值:false,即默认关闭该场景下的物化视图查询改写。
- 引入版本:v2.5.18, v3.0.9, v3.1.7, v3.2.2
enable_rule_based_materialized_view_rewrite
- 描述:是否 开启基于规则的物化视图查询改写功能,主要用于处理单表查询改写。
- 默认值:true
- 引入版本:v2.5
enable_short_circuit
- 描述:是否启用短路径查询。默认值:
false
。如果将其设置为true
,当查询满足条件(用于评估是否为点查):WHERE 子句的条件列必须包含所有主键列,并且运算符为=
或者IN
,则该查询才会走短路径。 - 默认值:false
- 引入版本:v3.2.3
enable_spill
- 描述:是否启用中间结果落盘。默认值:
false
。如果将其设置为true
,StarRocks 会将中间结果落盘,以减少在查询中处理聚合、排序或连接算子时的内存使用量。 - 默认值:false
- 引入版本:v3.0
enable_strict_order_by
- 描述:是否校验 ORDER BY 引用列是否有歧义。设置为默认值
TRUE
时,如果查询中的输出列存在不同的表达式使用重复别名的情况,且按照该别名进行排序,查询会报错,例如select distinct t1.* from tbl1 t1 order by t1.k1;
。该行为和 2.3 及之前版本的逻辑一致。如果 取值为FALSE
,采用宽松的去重机制,把这类查询作为有效 SQL 处理。 - 默认值:true
- 引入版本:v2.5.18,v3.1.7
enable_profile
用于设置是否需要查看查询的 profile。默认为 false
,即不需要查看 profile。2.5 版本之前,该变量名称为 is_report_success
,2.5 版本之后更名为 enable_profile
。
默认情况下,只有在查询发生错误时,BE 才会发送 profile 给 FE,用于查看错误。正常结束的查询不会发送 profile。发送 profile 会产生一定的网络开销,对高并发查询场景不利。当用户希望对一个查询的 profile 进行分析时,可以将这个变量设为 true
后,发送查询。查询结束后,可以通过在当前连接的 FE 的 web 页面(地址:fe_host:fe_http_port/query)查看 profile。该页面会显示最近 100 条开启了 enable_profile
的查询的 profile。
enable_query_queue_load (global)
- 描述:用于控制是否为导入任务启用查询队列。
- 默认值:false
- 类型:Boolean
enable_query_queue_select (global)
- 描述:用于控制是否为 SELECT 查询启用查询队列。
- 默认值:false
- 类型:Boolean
enable_query_queue_statistic (global)
- 描述:用于控制是否为统计信息查询启用查询队列。
- 默认值:false
- 类型:Boolean
enable_query_tablet_affinity
-
描述:用于控制在多次查询同一个 tablet 时是否倾向于选择固定的同一个副本。
如果待查询的表中存在大量 tablet,开启该特性会对性能有提升,因为会更快的将 tablet 的元信息以及数据缓存在内存中。但是,如果查询存在一些热点 tablet,开启该特性可能会导致性能有所退化,因为该特性倾向于将一个热点 tablet 的查询调度到相同的 BE 上,在高并发的场景下无法充分利用多台 BE 的资源。
-
默认值:
false
,表示使用原来的机制,即每次查询会从多个副本中选择一个。 -
类型:Boolean
-
引入版本:v2.5.6、v3.0.8、v3.1.4、v3.2.0
enable_lake_tablet_internal_parallel
- 描述:是否开启存算分离集群内云原生表的 Tablet 并行 Scan.
- 默认值:false
- 类型:Boolean
- 引入版本:v3.3.0
tablet_internal_parallel_mode
- 描述:Tablet 内部并行 Scan 策略。有效值:
auto
: 在 BE 或 CN 节点需要扫描的 Tablet 数小于 DOP 时,系统根据预估的 Tablet 大小自动判断是否需要并行 Scan。force_split
: 强制对 Tablet 进行拆分和并行扫描。
- 默认值:auto
- 类型:String
- 引入版本:v2.5.0
enable_scan_datacache
- 描述:是否开启 Data Cache 特性。该特性开启之后,StarRocks 通过将外部存储系统中的热数据缓存成多个 block,加速数据查询和分析。更多信息,参见 Data Cache。该特性从 2.5 版本开始支持。在 3.2 之前各版本中,对应变量为
enable_scan_block_cache
。 - 默认值:false
- 引入版本:v2.5
enable_populate_datacache
- 描述:StarRocks 从外部存储系统读取数据时,是否将数据进行缓存。默认值为
true
。如果只想读取,不进行缓存,可以将该参数设置为false
。在 3.2 之前各版本中,对应变量为enable_populate_block_cache
。 - 默认值:true
- 引入版本:v2.5
enable_tablet_internal_parallel
- 描述:是否开启自适应 Tablet 并行扫描,使用多个线程并行分段扫描一个 Tablet,可以减少 Tablet 数量对查询能力的限制。
- 默认值:true
- 引入版本:v2.3
enable_query_cache
- 描述:是否开启 Query Cache。取值范围:true 和 false。true 表示开启,false 表示关闭(默认值)。开启该功能后,只有当查询满足Query Cache 所述条件时,才会启用 Query Cache。
- 默认值:false
- 引入版本:v2.5
enable_adaptive_sink_dop
- 描述:是否开启导入自适应并行度。开启后 INSERT INTO 和 Broker Load 自动设置导入并行度,保持和
pipeline_dop
一致。新部署的 2.5 版本默认值为true
,从 2.4 版本升级上来为false
。 - 默认值:false
- 引入版本:v2.5
enable_pipeline_engine
- 描述:是否启用 Pipeline 执行引擎。
true
:启用(默认),false
:不启用。 - 默认值:true
enable_sort_aggregate
- 描述:是否开启 sorted streaming 聚合。
true
表示开启 sorted streaming 聚合功能,对流中的数据进行排序。 - 默认值:false
- 引入版本:v2.5
enable_global_runtime_filter
- 描述:Global runtime filter 开关。Runtime Filter(简称 RF)在运行时对数据进行过滤,过滤通常发生在 Join 阶段。当多表进行 Join 时,往往伴随着谓词下推等优化手段进行数据过滤,以减少 Join 表的数据扫描以及 shuffle 等阶段产生的 IO,从而提升查询性能。StarRocks 中有两种 RF,分别是 Local RF 和 Global RF。Local RF 应用于 Broadcast Hash Join 场景。Global RF 应用于 Shuffle Join 场景。
- 默认值
true
,表示打开 global runtime filter 开关。关闭该开关后, 不生成 Global RF, 但是依然会生成 Local RF。