BE 配置项 - 存算分离、数据湖和其他
部分 BE 节点配置项为动态参数,您可以通过命令在线修改。其他配置项为静态参数,需要通过修改 be.conf 文件后重启 BE 服务使相关修改生效。
查看 BE 配置项
您可以通过以下命令查看 BE 配置项:
SELECT * FROM information_schema.be_configs [WHERE NAME LIKE "%<name_pattern>%"]
配置 BE 参数
配置 BE 动态参数
您可以通过更新 information_schema.be_configs 中的值来配置 BE 节点的动态参数。
warning
设置无效的值可能会导致未知行为。在运行更新配置的命令之前,请务必仔细核对。
-- 将 <config_key> 替换为配置键,将 <config_value> 替换为配置值。
UPDATE information_schema.be_configs SET VALUE = <config_value> WHERE name = "<config_key>";
配置 BE 静态参数
BE 静态参数不支持在线修改,您需要在 be.conf 中修改并重启 BE 服务。
当前主题包含以下类型的 BE 配置:
存算分离
cloud_native_pk_index_rebuild_files_threshold
- 默认值:50
- 类型:Int
- 单位:-
- 是否动态:是
- 描述:云原生主键索引在恢复(Rebuild)时允许重建的最大 Segment 文件数。若需要重建的文件数超过该阈值,StarRocks 会立即将内存中的 MemTable 刷盘,以减少需要重放的 Segment 数量。设置为
0则禁用此提前刷盘策略。 - 引入版本:-
cloud_native_pk_index_rebuild_rows_threshold
- 默认值:10000000
- 类型:Long
- 单位:行
- 是否动态:是
- 描述:云原生主键索引在恢复(Rebuild)时允许重建的最大行数。若需要重建的行数超过该阈值,StarRocks 会立即将内存中的 MemTable 刷盘,以降低索引重建开销。设置为
0则禁用此提前刷盘策略。与cloud_native_pk_index_rebuild_files_threshold配合使用,任一阈值超出均会触发刷盘。此行数包含 Segment 行数以及 del 文件中记录的 tombstone(删除)行数,因此产生少量大型 del 文件的删除密集型负载也会计入该阈值;旧版本写入、未记录行数的 del 文件按 0 计。 - 引入版本:-
download_buffer_size
- 默认值:4194304
- 类型:Int
- 单位:Bytes
- 是否动态:是
- 描述:下载快照文件时每条传输流使用的内存缓冲区大小(fs::copy 的单次读写块大小)。值越大吞吐越高但每个并发下载占用更多内存。
- 引入版本:v3.2.13
graceful_exit_wait_for_frontend_heartbeat
- 默认值:false
- 类型: Boolean
- 单位:-
- 是否动态:是
- 描述: 确定是否在完成优雅退出前等待至少一个指示SHUTDOWN状态的FE心跳响应。启用后,优雅关闭进程将持续运行直至通过心跳RPC返回给FE SHUTDOWN状态变化,确保FE在两次常规心跳探测间隔期间有足够时间感知终止状态。
- 引入版本:v3.4.5
lake_compaction_stream_buffer_size_bytes
- 默认值:1048576
- 类型:Int
- 单位:Bytes
- 是否动态:是
- 描述:存算分离集群 Compaction 任务在远程 FS 读 I/O 阶段的 Buffer 大小。默认值为 1MB。您可以适当增大该配置项取值以加速 Compaction 任务。
- 引入版本:v3.2.3
lake_dump_tablet_metadata_per_request_memory_limit_bytes
- 默认值:268435456
- 类型:Long
- 单位:Bytes
- 是否动态:是
- 描述:CN 同步处理单个
/api/cloudnative/dump_tablet_metadata请求时的受跟踪内存预算。该预算使用标准 MemTracker 统计粒度,并非精确到字节的硬上限。该限制覆盖元数据检查、敏感字段脱敏和 JSON 序列化,但不包含 CN 元数据缓存中已存在的元数据,也不包含异步 HTTP 输出缓冲区。每个请求使用其被接纳时读取到的配置值。如果该值小于或等于0,新请求将以 fail-closed 方式被拒绝。 - 引入版本:v4.1.7
lake_dump_tablet_metadata_per_request_json_size_limit_bytes
- 默认值:33554432
- 类型:Long
- 单位:Bytes
- 是否动态:是
- 描述:单个
/api/cloudnative/dump_tablet_metadata请求完整 JSON 响应的最大字节数。响应交给 HTTP 输出缓冲区之前会检查该限制。每个请求使用其被接纳时读取到的配置值。如果该值小于或等于0,新请求将以 fail-closed 方式被拒绝。 - 引入版本:v4.1.7
lake_dump_tablet_metadata_max_concurrency
- 默认值:1
- 类型:Int
- 单位:请求
- 是否动态:是
- 描述:单个 CN 上可同时接纳的
/api/cloudnative/dump_tablet_metadata请求数上限。请求在其 HTTP request 被释放之前一直占用一个并发名额。调大配置会立即影响新请求;调小配置不会取消已接纳的请求,在活跃请求数降到新上限以下之前会拒绝新请求。如果该值小于或等于0,新请求将以 fail-closed 方式被拒绝。 - 引入版本:v4.1.7
lake_enable_del_file_crc_check
- 默认值:true
- 类型:Boolean
- 单位:-
- 是否动态:是
- 描述:存算分离集群下,在事务 Publish 或主键索引重建过程中读取主键表删除文件(
.del)时,是否根据其元数据中记录的 CRC32C 进行校验。校验不通过时,该操作会返回文件损坏错误并失败,而不是删除错误的主键。在该校验和引入之前写入的删除文件不带校验和,会被始终接受,因此该配置项不会影响旧版本写入的数据。该配置项不控制校验和的写入,仅控制读取时是否校验。 - 引入版本:v4.2
lake_enable_pk_preserve_txn_delete_order
- 默认值:true
- 类型:Boolean
- 单位:-
- 是否动态:是
- 描述:存算分离集群下,是否在单个导入事务内保留主键表 UPSERT 与 DELETE 的先后顺序。当同一个导入事务中同一个 key 先
DELETE后再UPSERT时,开启该配置后以最后写入的UPSERT为准(与存算一体集群行为一致)。默认开启。出于降级安全考虑,在回滚到(或与其混部)不支持该修复的 BE 版本之前,请先将其设为false:开启后,导入可能会持久化新版本格式的元数据,若 BE 回滚到不支持该修复的版本会被错误解析,可能产生主键重复。关闭时,DELETE 回退到旧有行为(在事务内所有 UPSERT 之后生效)。 - 引入版本:v4.1.4
lake_enable_protobuf_file_checksum
- 默认值:true
- 类型:Boolean
- 单位:-
- 是否动态:是
- 描述:是否在写入存算分离集群的 Tablet 元数据和事务日志文件时附加 Adler-32 校验和,以便在读取时检测这些文件是否损坏。无论该配置项如何设置,读取端在文件包含校验和时都会自动识别并校验;该配置项仅控制写入格式。仅当集群仍可能降级到不支持该校验和格式的版本时,才将该配置项设置为
false。在滚动升级或降级期间,旧版本的 BE 或 CN 使用旧的读取逻辑,无法解析新格式写入的文件。 - 引入版本:v4.2
lake_pk_compaction_max_input_rowsets
- 默认值:500
- 类型:Int
- 单位:-
- 是否动态:是
- 描述:存算分离集群下,主键表 Compaction 任务中允许的最大输入 Rowset 数量。该参数默认值自 v3.2.4 和 v3.1.10 版本开始从
5变更为1000,并自 v3.3.1 和 v3.2.9 版本开始变更为500。存算分离集群中的主键表在开启 Sized-tiered Compaction 策略后 (即设置enable_pk_size_tiered_compaction_strategy为true),无需通过限制每次 Compaction 的 Rowset 个数来降低写放大,因此调大该值。 - 引入版本:v3.1.8, v3.2.3
lake_pk_compaction_base_enable_delete_trigger
- 默认值:false
- 类型:Boolean
- 单位:-
- 是否动态:是
- 描述:存算分离集群下,主键表 Tablet 的删除量达到
lake_pk_compaction_base_delete_ratio_threshold或lake_pk_compaction_base_delete_rows_threshold时,是否自动从 Cumulative Compaction 切换到 Base Compaction。默认关闭,因为lake_pk_compaction_base_delete_rows_threshold是绝对行数:在已有数据持续被更新或删除的大表上,Tablet 每次 Base Compaction 之后很快又会达到该值,而每次 Base Compaction 最多重写 Tablet 中update_compaction_ratio_threshold(默认 0.5)比例的数据。手动执行ALTER TABLE ... COMPACT时,无论该参数如何设置都会执行 Base Compaction。 - 引入版本:v4.1.7
lake_pk_compaction_base_delete_ratio_threshold
- 默认值:0.5
- 类型:Double
- 单位:-
- 是否动态:是
- 描述:存算分离集群下,将主键表 Tablet 从 Cumulative Compaction(Size-tiered 小文件合并)切换到 Base Compaction 的两个触发条件之一。Base Compaction 会重写带删除的 Rowset(删除行数多的优先),物理清除被删除的行并缩小其 Delete Vector。
lake_pk_compaction_base_enable_delete_trigger为true时,当 Tablet 的整体删除比例(各 Rowset 的sum(num_dels) / sum(num_rows))达到该值、或其累计删除行数达到lake_pk_compaction_base_delete_rows_threshold时触发。手动执行ALTER TABLE ... COMPACT时,无论这些参数如何设置都会强制执行 Base Compaction。 - 引入版本:v4.1.4
lake_pk_compaction_base_delete_rows_threshold
- 默认值:10000000
- 类型:Int
- 单位:-
- 是否动态:是
- 描述:存算分离集群下主键表 Base Compaction 的两个触发条件之一(参见
lake_pk_compaction_base_delete_ratio_threshold)。lake_pk_compaction_base_enable_delete_trigger为true时,当 Tablet 的累计删除行数(各 Rowset 的sum(num_dels))达到该值时触发 Base Compaction。该绝对数量触发条件是对比例触发条件的补充:在高频更新/删除的表上,Delete Vector 会膨胀、空间被浪费,但整体删除比例可能因大量存活行的稀释而偏低,仅靠比例触发条件不会触发。调大该值可降低 Base Compaction 频率,调小则可更早回收 Delete Vector。 - 引入版本:v4.1.4
lake_put_txn_log_timeout_guard_ms
- 默认值:-1
- 类型:Int64
- 单位:毫秒
- 是否动态:是
- 描述:存算分离集群下,向对象存储写入事务日志(
put_txn_log和put_combined_txn_log路径)的超时守护阈值。如果写入一条事务日志的耗时超过该值,StarRocks 会将慢线程的堆栈打印到 BE 日志,以便诊断对象存储写入慢的问题。默认关闭(小于或等于0表示关闭该守护);如需开启,可将其设置为正值,例如4000(4 秒)。 - 引入版本:-
lake_rows_mapper_read_parallelism
- 默认值:32
- 类型:Int
- 单位:sub-chunk 个数
- 是否动态:是
- 描述:存算分离集群下,主键表轻量 Compaction 发布阶段,
RowsMapperIterator读取.lcrm(lake compaction rows-mapper)文件时,允许同时 in-flight 的 sub-chunk 读取数量上限。每个 sub-chunk 大小由lake_rows_mapper_sub_chunk_bytes控制,且不跨 segment 边界。迭代器最多向 PK index 执行线程池提交该数量的并发读取请求,让远端读取与调用方的 per-segment 处理流水化进行。内存上限为lake_rows_mapper_read_parallelism * lake_rows_mapper_sub_chunk_bytes。设为1可关闭流水化,回退到顺序读取。
lake_rows_mapper_sub_chunk_bytes
- 默认值:4194304
- 类型:Int
- 单位:Bytes
- 是否动态:是
- 描述:存算分离集群下,主键表轻量 Compaction 发布阶段,
RowsMapperIterator流水化读取.lcrm文件时使用的 sub-chunk 粒度。每个输出 segment 被切分为ceil(segment_bytes / lake_rows_mapper_sub_chunk_bytes)个 sub-chunk,独立流水化。值越小,少而大的输出 segment 能获得越高的并发度,但代价是更多的范围读取和消费时一次额外的 memcpy。默认 4 MiB,与 starcache 磁盘层 block 大小对齐。
lake_vacuum_enable_task_timeout
- 默认值:true
- 类型:Boolean
- 单位:-
- 是否动态:是
- 描述:Vacuum 任务是否遵循请求中携带的超时时间(
VacuumRequest.timeout_ms),并在超时后自行终止。设为false时,无论 FE 调用方等待多久,Vacuum 任务都会一直运行至完成。
lake_vacuum_min_batch_delete_size
- 默认值:200
- 类型:Int64
- 单位:文件数
- 是否动态:是
- 描述:存算分离集群下,Vacuum 单次
DeleteObjects请求批量合并的过期文件数量。批量越大,单次调用摊销的 HTTP/认证/签名等固定开销越多,且对对象存储 prefix 级别的请求频次压力越小;代价是单次调用 latency 升高、出现瞬时错误需要 retry 时回放成本增大。AWS S3 用户可以进一步将该值调到协议上限1000,因为 AWS S3 单DeleteObjects服务端耗时几乎与 batch size 无关。
loop_count_wait_fragments_finish
- 默认值:2
- 类型:Int
- 单位:-
- 是否动态:是
- 描述:BE/CN 退出时需要等待正在执行的查询完成的轮次,一轮次固定 10 秒。设置为
0表示禁用轮询等待,立即退出。自 v3.4 起,该参数变为动态参数,且默认值由0变为2。 - 引入版本:v2.5
max_client_cache_size_per_host
- 默认值:10
- 类型:Int
- 单位:-
- 是否动态:否
- 描述:BE 范围内的客户端缓存为每个远程主机保留的最大缓存 client 实例数。提高此值可以减少重连和 stub 创建开销,但会增加内存和文件描述符使用;降低它则节省资源但可能增加连接 churn。该值在启动时读取,运行时无法更改。目前一个共享设置控制所有客户端缓存类型;将来可能会引入每种缓存的独立配置。
- 引入版本:v3.2.0
primary_key_index_memory_high_percent
- 默认值: 75
- 类型: Int
- 单位: -
- 是否动态配置: 是
- 描述: 存算分离集群中,后台线程定期回收主键索引缓存的目标,以缓存容量的百分比表示。缓存容量即更新相关内存的上限(参见
update_memory_limit_percent)。占用超过该比例时,按最近最少使用的顺序淘汰未在使用的主键索引,直至占用回落到该比例以内。正在使用的主键索引不会被淘汰。建议设置为小于primary_key_index_memory_urgent_percent的值。 - 引入版本: -
primary_key_index_memory_middle_percent
- 默认值: 50
- 类型: Int
- 单位: -
- 是否动态配置: 是
- 描述: 存算分离集群中主键表 Publish 因超出内存限制而失败时,主键索引缓存的回收目标,以缓存容量的百分比表示。此时系统会淘汰未在使用的主键索引,直至占用回落到该比例以内,为重试的 Publish 腾出内存。建议设置为小于
primary_key_index_memory_high_percent的值。 - 引入版本: -
primary_key_index_memory_urgent_percent
- 默认值: 85
- 类型: Int
- 单位: -
- 是否动态配置: 是
- 描述: 存算分离集群中主键索引缓存的占用上限,以缓存容量的百分比表示。每次 Publish 结束后(因超出内存限制而失败的除外)都会检查一次:占用超过该比例时,按最近最少使用的顺序淘汰未在使用的主键索引,直至占用回落到该比例以内。缓存增长快于后台线程将其回收到
primary_key_index_memory_high_percent的速度时,由该配置项兜底,因此应设置为大于该配置项的值。 - 引入版本: -
starlet_filesystem_instance_cache_capacity
- 默认值:10000
- 类型:Int
- 单位:-
- 是否动态:是
- 描述:starlet filesystem 实例的缓存容量。
- 引入版本:v3.2.16, v3.3.11, v3.4.1
starlet_filesystem_instance_cache_ttl_sec
- 默认值:86400
- 类型:Int
- 单位:秒
- 是否动态:是
- 描述:starlet filesystem 实例缓存的过期时间。
- 引入版本:v3.3.15, 3.4.5
starlet_fslib_azure_storage_max_single_part_size
- 默认值:104857600
- 类型:Int64
- 单位:Bytes
- 是否动态:是
- 描述:存算分离集群中,写入 Azure Blob Storage 或 ADLS Gen2 的对象超过该大小时,使用分片上传(Multipart Upload)而非单次上传请求。Azure 的两种文件系统共用该参数。切换到分片上传之前,每个输出流最多在内存中缓存该大小的数据,因此调大该值会增加内存占用,且随并发输出流数量成倍增加。若调得过大以完全避开分片上传,一旦超过对象存储的单次请求上传上限,也可能导致上传直接失败,并返回该存储后端自身的错误。修改该参数对正在进行的上传立即生效。取值必须大于 0,非正数将被拒绝。合法取值会覆盖通过 BE 命令行传入的对应的
--fslib_*gflag;而在 BE 启动时被拒绝的取值不会生效,BE 保留此前生效的值并记录 WARNING 日志,此时该参数显示的值可能并非实际生效的值。 - 引入版本:v4.1.5, v4.2
starlet_fslib_azure_storage_min_upload_part_size
- 默认值:5242880
- 类型:Int64
- 单位:Bytes
- 是否动态:是
- 描述:存算分离集群中,向 Azure Blob Storage 或 ADLS Gen2 进行分片上传时使用的块(Block)大小。Azure 的两种文件系统共用该参数。每次上传块之前,每个输出流最多在内存中缓存该大小的数据,因此调大该值会增加内存占用,且随并发输出流数量成倍增加。取值过小会增加请求数量,并可能超出存储服务的块数量限制。修改该参数对正在进行的上传立即生效。取值必须大于 0,非正数将被拒绝。合法取值会覆盖通过 BE 命令行传入的对应的
--fslib_*gflag;而在 BE 启动时被拒绝的取值不会生效,BE 保留此前生效的值并记录 WARNING 日志,此时该参数显示的值可能并非实际生效的值。 - 引入版本:v4.1.5, v4.2
starlet_fslib_gcs_max_single_part_size
- 默认值:104857600
- 类型:Int64
- 单位:Bytes
- 是否动态:是
- 描述:存算分离集群中,写入 Google Cloud Storage 的对象超过该大小时,使用流式上传而非单次 Insert 请求。切换到流式上传之前,每个输出流最多在内存中缓存该大小的数据,因此调大该值会增加内存占用,且随并发输出流数量成倍增加。若调得过大以完全避开流式上传,一旦超过对象存储的单次请求上传上限,也可能导致上传直接失败,并返回该存储后端自身的错误。修改该参数对正在进行的上传立即生效。取值必须大于 0,非正数将被拒绝。合法取值会覆盖通过 BE 命令行传入的对应的
--fslib_*gflag;而在 BE 启动时被拒绝的取值不会生效,BE 保留此前生效的值并记录 WARNING 日志,此时该参数显示的值可能并非实际生效的值。 - 引入版本:v4.1.5, v4.2
starlet_fslib_s3_max_single_part_size
- 默认值:104857600
- 类型:Int64
- 单位:Bytes
- 是否动态:是
- 描述:存算分离集群中,写入 S3 或兼容 S3 的对象存储的对象超过该大小时,使用分片上传(Multipart Upload)而非单次
PutObject请求。切换到分片上传之前,每个输出流最多在内存中缓存该大小的数据,因此调大该值会增加内存占用,且随并发输出流数量成倍增加。若调得过大以完全避开分片上传,也可能导致上传直接失败:AWS S3 拒绝单次PutObject超过 5 GiB 的对象,其他兼容 S3 的对象存储限制可能不同。修改该参数对正在进行的上传立即生效。取值必须大于 0,非正数将被拒绝。合法取值会覆盖通过 BE 命令行传入的对应的--fslib_*gflag;而在 BE 启动时被拒绝的取值不会生效,BE 保留此前生效的值并记录 WARNING 日志,此时该参数显示的值可能并非实际生效的值。该参数用于存算分离集群中的 starlet 上传,与experimental_s3_*系列参数无关。 - 引入版本:v4.1.5, v4.2
starlet_fslib_s3_min_upload_part_size
- 默认值:5242880
- 类型:Int64
- 单位:Bytes
- 是否动态:是
- 描述:存算分离集群中,向 S3 或兼容 S3 的对象存储进行分片上传时使用的分片大小。每次上传分片之前,每个输出流最多在内存中缓存该大小的数据,因此调大该值会增加内存占用,且随并发输出流数量成倍增加。取值过小会增加请求数量,并可能超出 AWS S3 的 10000 个分片上限,或低于其 5 MB 的最小分片大小;其他兼容 S3 的对象存储限制不同。修改该参数对正在进行的上传立即生效。取值必须大于 0,非正数将被拒绝。合法取值会覆盖通过 BE 命令行传入的对应的
--fslib_*gflag;而在 BE 启动时被拒绝的取值不会生效,BE 保留此前生效的值并记录 WARNING 日志,此时该参数显示的值可能并非实际生效的值。该参数用于存算分离集群中的 starlet 上传,与experimental_s3_*系列参数无关。 - 引入版本:v4.1.5, v4.2
starlet_port
- 默认值:9070
- 类型:Int
- 单位:-
- 是否动态:否
- 描述:BE 和 CN 的额外 Agent 服务端口。
- 引入版本:-
starlet_star_cache_disk_size_percent
- 默认值:80
- 类型:Int
- 单位:-
- 是否动态:否
- 描述:存算分离集群中,Data Cache 最多可使用的磁盘容量百分比。仅在
datacache_unified_instance_enable为false时生效。 - 引入版本:v3.1
starlet_use_star_cache
- 默认值:false(v3.1)true(v3.2.3 起)
- 类型:Boolean
- 单位:-
- 是否动态:是
- 描述:存算分离集群中是否使用 Data Cache。
true表示启用该功能,false表示禁用。自 v3.2.3 起,默认值由false调整为true。 - 引入版本:v3.1
starlet_write_file_with_tag
- 默认值:false
- 类型:Boolean
- 单位:-
- 是否动态:是
- 描述:存算分离集群下,是否将写入到对象存储的文件打上对象存储 Tag,方便自定义管理文件。
- 引入版本:v3.5.3
table_schema_service_max_retries
- 默认值:3
- 类型:Int
- 单位:-
- 是否动态:是
- 描述:Table Schema Service 请求的最大重试次数。
- 引入版本:v4.1
数据湖
datacache_block_buffer_enable
- 默认值:true
- 类型:Boolean
- 单位:-
- 是否动态:否
- 描述:是否启用 Block Buffer 优化 Data Cache 效率。当启用 Block Buffer 时,系统会从 Data Cache 中读取完整的 Block 数据并缓存在临时 Buffer 中,从而减少频繁读取缓存带来的额外开销。
- 引入版本:v3.2.0
datacache_disk_adjust_interval_seconds
- 默认值:10
- 类型:Int
- 单位:秒
- 是否动态:是
- 描述:Data Cache 容量自动调整周期。每隔这段时间系统会进行一次缓存磁盘使用率检测,必要时触发相应扩缩容操作。
- 引入版本:v3.3.0
datacache_disk_idle_seconds_for_expansion
- 默认值:180
- 类型:Int
- 单位:秒
- 是否动态:是
- 描述:Data Cache 自动扩容最小等待时间。只有当磁盘使用率在
datacache_disk_low_level以下持续时间超过该时长,才会触发自动扩容。 - 引入版本:v3.3.0
datacache_disk_size
- 默认值:0
- 类型:String
- 单位:-
- 是否动态:是
- 描述:单个磁盘缓存数据量的上限,可设为比例上限(如
80%)或物理上限(如2T,500G等)。假设系统使用了两块磁盘进行缓存,并设置datacache_disk_size参数值为21474836480,即 20 GB,那么最多可缓存 40 GB 的磁盘数据。默认值为0,即仅使用内存作为缓存介质,不使用磁盘。 - 引入版本:-
datacache_enable
- 默认值:true
- 类型:Boolean
- 单位:-
- 是否动态:否
- 描述:是否启用 Data Cache。
true表示启用,false表示不启用。自 v3.3 起,默认值变为true。 - 引入版本:-
datacache_eviction_policy
- 默认值:slru
- 类型:String
- 单位:-
- 是否动态:否
- 描述:缓存淘汰策略。有效值:
lru(least recently used) 和slru(Segmented LRU)。 - 引入版本:v3.4.0
datacache_inline_item_count_limit
- 默认值:130172
- 类型:Int
- 单位:-
- 是否动态:否
- 描述:Data Cache 内联对象数量上限。当缓存的 Block 对象特别小时,Data Cache 会选择使用内联方式将 Block 数据和元数据一起缓存在内存中。
- 引入版本:v3.4.0
datacache_mem_size
- 默认值:0
- 类型:String
- 单位:-
- 是否动态:是
- 描述:内存缓存数据量的上限,可设为比例上限(如
10%)或物理上限(如10G,21474836480等)。 - 引入版本:-
datacache_min_disk_quota_for_adjustment
- 默认值:10737418240
- 类型:Int
- 单位:Bytes
- 是否动态:是
- 描述:Data Cache 自动扩缩容时的最小有效容量。当需要调整的目标容量小于该值时,系统会直接将缓存空间调整为
0,以避免缓存空间过小导致频繁填充和淘汰带来负优化。 - 引入版本:v3.3.0
datacache_unified_instance_enable
- 默认值:true
- 类型:Bool
- 单位:-
- 是否动态:否
- 描述:存算分离集群中,是否使用统一的 data cache 实例管理 internal catalog 和 external catalog 的数据缓存。
- 引入版本:v3.4.0
disk_high_level
- 默认值:90
- 类型:Int
- 单位:-
- 是否动态:是
- 描述:磁盘高水位(百分比)。当磁盘使用率高于该值时,系统自动淘汰 Data Cache 中的缓存数据。自 v3.4.0 起,该参数默认值由
80变更为90。该参数自 v4.0 起由datacache_disk_high_level更名为disk_high_level。 - 引入版本:v3.3.0
disk_low_level
- 默认值:60
- 类型:Int
- 单位:-
- 是否动态:是
- 描述:磁盘低水位(百分比)。当磁盘使用率在
datacache_disk_idle_seconds_for_expansion指定的时间内持续低于该值,且用于缓存数据的空间已经写满时,系统将自动进行缓存扩容,增加缓存上限。该参数自 v4.0 起由datacache_disk_low_level更名为disk_low_level。 - 引入版本:v3.3.0
disk_safe_level
- 默认值:80
- 类型:Int
- 单位:-
- 是否动态:是
- 描述:磁盘安全水位(百分比)。当 Data Cache 进行缓存自动扩缩容时,系统将尽可能以该阈值为磁盘使用率目标调整缓存容量。自 v3.4.0 起,该参数默认值由
70变更为80。该参数自 v4.0 起由datacache_disk_safe_level更名为disk_safe_level。 - 引入版本:v3.3.0
enable_connector_sink_spill
- 默认值:true
- 类型:Boolean
- 单位:-
- 是否动态:是
- 描述:是否支持在外表写入时启用数据 Spill。启用该功能能够避免当内存不足时写入外表导致生成大量小文件问题。当前仅支持向 Iceberg 表写入数据时启用 Spill 功能。
- 引入版本:v4.0.0
enable_datacache_disk_auto_adjust
- 默认值:true
- 类型:Boolean
- 单位:-
- 是否动态:是
- 描述:Data Cache 磁盘容量自动调整开关,启用后会根据当前磁盘使用率动态调整缓存容量。该参数自 v4.0 起由
datacache_auto_adjust_enable更名为enable_datacache_disk_auto_adjust。 - 引入版本:v3.3.0
jdbc_connection_idle_timeout_ms
- 默认值:600000
- 类型:Int
- 单位:毫秒
- 是否动态:否
- 描述:JDBC 空闲连接超时时间。如果 JDBC 连接池内的连接空闲时间超过此值,连接池会关闭超过
jdbc_minimum_idle_connections配置项中指定数量的空闲连接。 - 引入版本:-
jdbc_connection_pool_size
- 默认值:8
- 类型:Int
- 单位:-
- 是否动态:否
- 描述:JDBC 连接池大小。每个 BE 节点上访问
jdbc_url相同的外表时会共用同一个连接池。 - 引入版本:-
jdbc_minimum_idle_connections
- 默认值:1
- 类型:Int
- 单位:-
- 是否动态:否
- 描述:JDBC 连接池中最少的空闲连接数量。
- 引入版本:-
jdbc_connection_max_lifetime_ms
- 默认值:300000
- 类型:Long
- 单位:毫秒
- 是否动态:否
- 描述:JDBC 连接池中连接的最大生命周期。连接在此超时前会被回收,以防止出现陈旧连接。允许的最小值为 30000 (30 秒)。
- 引入版本:-
jdbc_connection_keepalive_time_ms
- 默认值:30000
- 类型:Long
- 单位:毫秒
- 是否动态:否
- 描述:空闲 JDBC 连接的保活间隔。空闲连接会在此间隔进行测试,以主动检测陈旧连接。设置为 0 可禁用保活探测。启用时,必须 >= 30000 且小于
jdbc_connection_max_lifetime_ms。无效的启用值将被静默禁用(重置为 0)。 - 引入版本:-
lake_clear_corrupted_cache_data
- 默认值:false
- 类型:Boolean
- 单位:-
- 是否动态:是
- 描述:存算分离集群下,是否允许自动清理损坏的数据缓存。
- 引入版本:v3.4
lake_pk_index_sst_verify_checksum
- 默认值:true
- 类型:Boolean
- 单位:-
- 是否动态:是
- 描述:存算分离集群下,读取云原生主键索引 sstable(点查与 Compaction 归并)时是否校验数据块 Checksum。开启后,损坏的字节(通常来自损坏的本地缓存副本)会确定性地报 Corruption 错误并触发损坏缓存清理,而不是被错误解析或静默返回错误的索引值。注意:自动清理损坏缓存还需同时开启
lake_clear_corrupted_cache_data。 - 引入版本:v4.1
lake_clear_corrupted_cache_meta
- 默认值:true
- 类型:Boolean
- 单位:-
- 是否动态:是
- 描述:存算分离集群下,是否允许自动清理损坏的元数据缓存。作用范围包括 Tablet 元数据文件和事务日志(txn log)文件的本地缓存。读取此类文件时如果遇到数据损坏错误,系统会清除对应的缓存副本,并从远端存储重新读取一次。
- 引入版本:v3.3
lake_enable_vertical_compaction_fill_data_cache
- 默认值:true
- 类型:Boolean
- 单位:-
- 是否动态:是
- 描述:存算分离集群下,是否允许 Vertical Compaction 任务在执行时缓存数据到本地磁盘上。
true表示启用,false表示不启用。 - 引入版本:v3.1.7, v3.2.3
lake_replication_read_buffer_size
- 默认值:16777216
- 类型:Long
- 单位:Bytes
- 是否动态:是
- 描述:存算分离跨集群复制(lake replication)下载 segment 文件时使用的读缓冲区大小。该值决定每次读取远程文件的分配大小,实际使用时取此设置与 1 MB 的较大值。较大的值减少读取调用次数,可提高吞吐,但增加每个并发下载的内存占用;较小的值降低内存使用但增加 I/O 调用次数。请根据网络带宽、存储 I/O 特性和并行复制线程数量进行调优。
- 引入版本:v4.1.2
lake_replication_max_file_copy_retry
- 默认值:3
- 类型:Int
- 单位:-
- 是否动态:是
- 描述:存算分离跨集群复制(lake-to-lake replication)中非 segment 文件(
.sst、.delvec、.del、.cols)拷贝的最大重试次数。每次尝试会校验已拷贝文件大小是否与源文件一致,以检测因对象存储瞬时问题导致的截断拷贝。如果在不稳定的存储上复制时频繁出现文件损坏,可增大此值。 - 引入版本:v4.1.2
lake_replication_file_copy_threads
- 默认值:16
- 类型:Int
- 单位:-
- 是否动态:否
- 描述:存算分离跨集群复制(lake-to-lake replication)逐文件拷贝所使用的 CN 全局独立线程池大小。默认值用于限制并发拷贝任务及其读缓冲区,不随 CPU 核数增长。
0表示cpu_cores * 4;负值表示-value * cpu_cores。该线程池在启动时一次性创建,调整大小需重启 CN。 - 引入版本:v4.1.2
lake_replication_max_parallel_files_per_tablet
- 默认值:4
- 类型:Int
- 单位:-
- 是否动态:是
- 描述:存算分离跨集群复制(lake-to-lake replication)中单个 tablet 同时拷贝文件的最大数量。所有 tablet 共用 CN 全局的
lake_replication_file_copy_threads线程池,因此该配置可防止单个 tablet 独占线程池。配置值小于或等于1时,单个 tablet 内的文件串行拷贝。 - 引入版本:v4.1.4
lake_replication_parallel_copy_min_file_count
- 默认值:2
- 类型:Int
- 单位:-
- 是否动态:是
- 描述:存算分离跨集群复制(lake-to-lake replication)中,启用单个 tablet 内文件并行拷贝所需的最小文件数。设置为
0时关闭独立文件拷贝线程池,由调用复制任务直接执行文件拷贝。 - 引入版本:v4.1.2
lake_service_max_concurrency
- 默认值:0
- 类型:Int
- 单位:-
- 是否动态:否
- 描述:在存算分离集群中,RPC 请求的最大并发数。当达到此阈值时,新请求会被拒绝。将此项设置为
0表示对并发不做限制。 - 引入版本:-
query_max_memory_limit_percent
- 默认值:90
- 类型:Int
- 单位:-
- 是否动态:否
- 描述:Query Pool 能够使用的最大内存上限。以 Process 内存上限的百分比来表示。
- 引入版本:v3.1.0
rocksdb_max_write_buffer_memory_bytes
- 默认值:1073741824
- 类型:Int64
- 单位:-
- 是否动态:否
- 描述:rocksdb中write buffer内存的最大上限。
- 引入版本:v3.5.0
rocksdb_write_buffer_memory_percent
- 默认值:5
- 类型:Int64
- 单位:-
- 是否动态:否
- 描述:rocksdb中write buffer可以使用的内存占比。默认值是百分之5,最终取值不会小于64MB,也不会大于1GB。
- 引入版本:v3.5.0
其他
default_mv_resource_group_concurrency_limit
- 默认值:0
- 类型:Int
- 单位:-
- 是否动态:是
- 描述:物化视图刷新任务在单个 BE 上的并发上限。默认为
0,即不做并发数限制。 - 引入版本:-
default_mv_resource_group_cpu_limit
- 默认值:1
- 类型:Int
- 单位:-
- 是否动态:是
- 描述:物化视图刷新任务占用单个 BE 的 CPU 核数上限。
- 引入版本:-
default_mv_resource_group_memory_limit
- 默认值:0.8
- 类型:Double
- 单位:
- 是否动态:是
- 描述:物化视图刷新任务占用单个 BE 内存上限,默认 80%。
- 引入版本:v3.1
default_mv_resource_group_spill_mem_limit_threshold
- 默认值:0.8
- 类型:Double
- 单位:
- 是否动态:是
- 描述:物化视图刷新任务触发落盘的内存占用阈值,默认80%。
- 引入版本:v3.1
enable_resolve_hostname_to_ip_in_load_error_url
- 默认值:false
- 类型:Boolean
- 单位:-
- 是否动态:是
- 描述:
error_urlsDebug 过程中,是否允许 Operator 根据环境需求选择使用 FE 心跳的原始主机名,或强制解析为 IP 地址。true:将主机名解析为 IP 地址。false(默认):在错误 URL 中保留原始主机名。
- 引入版本:v4.0.1
enable_retry_apply
- 默认值:true
- 类型:Boolean
- 单位:-
- 是否动态:是
- 描述:启用后,被分类为可重试的 Tablet apply 失败(例如暂时的内存限制错误)会被重新调度以重试,而不是立即将 tablet 标记为错误。TabletUpdates 中的重试路径使用
retry_apply_interval_second乘以当前失败计数并限制到 600s 的最大值来安排下一次尝试,因此随着连续失败,退避会增长。明确不可重试的错误(例如 corruption)会绕过重试并导致 apply 过程立即进入错误状态。重试会持续直到达到总体超时/终止条件,之后 apply 将进入错误状态。关闭此项会禁用对失败 apply 任务的自动重新调度,使失败的 apply 在没有重试的情况下直接转为错误状态。 - 引入版本:v3.2.9
enable_token_check
- 默认值:true
- 类型:Boolean
- 单位:-
- 是否动态:是
- 描述:是否开启 Token 检验。
true表示开启,false表示不开启。 - 引入版本:-
es_http_timeout_ms
- 默认值:5000
- 类型:Int
- 单位:Milliseconds
- 是否动态:否
- 描述:访问 Elasticsearch 的 HTTP 超时时长(毫秒)。在建立连接和发送请求时使用,超时会导致请求失败。
- 引入版本:-
es_index_max_result_window
- 默认值:10000
- 类型:Int
- 单位:-
- 是否动态:否
- 描述:Elasticsearch 索引的
max_result_window限制,用于控制 Scroll/分页的最大返回窗口;超出将被 ES 拒绝。需要与 ES 端设置匹配。 - 引入版本:-
es_scroll_keepalive
- 默认值:5m
- 类型:String
- 单位:Minutes (string with suffix, e.g. "5m")
- 是否动态:否
- 描述:发送给 Elasticsearch 的 scroll 搜索上下文的 keep-alive 时长。该值在构建初始 scroll URL (
?scroll=<value>) 以及发送后续 scroll 请求(通过 ESScrollQueryBuilder)时按字面使用(例如 "5m")。此设置控制 ES 端在垃圾回收前保留搜索上下文的时间;设置更长会让 scroll 上下文存活更久,但会延长 ES 集群的资源占用。该值在启动时由 ES scan reader 读取,运行时不可更改。 - 引入版本:v3.2.0
load_replica_status_check_interval_ms_on_failure
- 默认值:2000
- 类型:Int
- 单位:Milliseconds
- 是否动态:是
- 描述:当上一次检查的 RPC 失败时,从副本向主副本检查其状态的时间间隔。
- 引入版本:v3.5.1
load_replica_status_check_interval_ms_on_success
- 默认值:15000
- 类型:Int
- 单位:Milliseconds
- 是否动态:是
- 描述:当上一次检查的 RPC 成功时,从副本向主副本检查其状态的时间间隔。
- 引入版本:v3.5.1
max_length_for_bitmap_function
- 默认值:1000000
- 类型:Int
- 单位:Bytes
- 是否动态:否
- 描述:bitmap 函数输入值的最大长度。
- 引入版本:-
max_length_for_to_base64
- 默认值:200000
- 类型:Int
- 单位:Bytes
- 是否动态:否
- 描述:to_base64() 函数输入值的最大长度。
- 引入版本:-
memory_high_level
- 默认值:75
- 类型:Long
- 单位:Percent
- 是否动态:是
- 描述:以进程内存上限的百分比表示的高水位内存阈值。当总内存消耗上升超过该百分比时,BE 开始逐步释放内存(目前通过驱逐 data cache 和 update cache)以缓解压力。监控器使用此值来计算
memory_high = mem_limit * memory_high_level / 100,并且如果消耗大于 memory_high,则在 GC advisor 的指导下执行受控驱逐;如果消耗超过 memory_urgent_level(一个单独的配置),则会进行更激进的即时回收。此值还用于在超过阈值时禁用某些高内存消耗的操作(例如 primary-key preload)。必须满足与 memory_urgent_level 的校验关系(memory_urgent_level>memory_high_level,memory_high_level>=1,memory_urgent_level<=100)。 - 引入版本:v3.2.0
memory_urgent_level
- 默认值:90
- 类型:Int
- 单位:Percent
- 是否动态:否
- 描述:内存紧急阈值(占进程内存上限的百分比)。当消耗超过该值时会触发更激进的即时回收;需满足
memory_urgent_level > memory_high_level且不超过 100。 - 引入版本:-
report_exec_rpc_request_retry_num
- 默认值:10
- 类型:Int
- 单位:-
- 是否动态:是
- 描述:用于向 FE 汇报执行状态的 RPC 请求的重试次数。默认值为 10,意味着如果该 RPC 请求失败(仅限于 fragment instance 的 finish RPC),将最多重试 10 次。该请求对于导入任务(load job)非常重要,如果某个 fragment instance 的完成状态报告失败,整个导入任务将会一直挂起,直到超时。
- 引入版本:-
sleep_one_second
- 默认值:1
- 类型:Int
- 单位:秒
- 是否动态:否
- 描述:BE Agent Worker 线程的全局短睡眠间隔,当 Master 地址/心跳尚不可用或需要短时间重试/退避时作为一秒的暂停。多个 Report Worker Pool(例如 ReportDiskStateTaskWorkerPool、ReportOlapTableTaskWorkerPool、ReportWorkgroupTaskWorkerPool)引用此值,以避免忙等(busy-waiting)并在重试时降低 CPU 消耗。增大此值会降低重试频率并减慢对 Master 可用性的响应;减小会提高轮询频率并增加 CPU 使用。请在权衡响应性与资源使用后调整该项。
- 引入版本:v3.2.0
small_file_dir
- 默认值:
${STARROCKS_HOME}/lib/small_file/ - 类型:String
- 单位:-
- 是否动态:否
- 描述:保存文件管理器下载的文件的目录。
- 引入版本:-
upload_buffer_size
- 默认值:4194304
- 类型:Int
- 单位:Bytes
- 是否动态:是
- 描述:上传快照文件到远端存储时的缓冲区大小(fs::copy 读写块大小)。值越大传输吞吐越高但每个并发上传占用更多内存;可与 upload_worker_count 一起调优。
- 引入版本:v3.2.13
user_function_dir
- 默认值:
${STARROCKS_HOME}/lib/udf - 类型:String
- 单位:-
- 是否动态:否
- 描述:UDF 存放的路径。
- 引入版本:-
web_log_bytes
- 默认值:1048576 (1 MB)
- 类型:long
- 单位:Bytes
- 是否动态:否
- 描述:从 INFO 日志文件读取并在 BE 调试 Web Server 的日志页面上显示的最大字节数。该处理器使用此值计算一个 seek 偏移量(显示最后 N 字节),以避免读取或提供非常大的日志文件。如果日志文件小于该值则显示整个文件。注意:在当前实现中,用于读取并服务 INFO 日志的代码被注释掉了,处理器会报告无法打开 INFO 日志文件,因此除非启用日志服务代码,否则此参数可能无效。
- 引入版本:v3.2.0