BE Configuration
Some BE configuration items are dynamic parameters which you can set interactively when BE nodes are online. The rest of them are static parameters. You can only set the static parameters of a BE node by changing them in the corresponding configuration file be.conf and restarting the BE node to allow the change to take effect.
View BE configuration itemsβ
You can view the BE configuration items using the following command:
curl http://<BE_IP>:<BE_HTTP_PORT>/varz
Configure BE parametersβ
Configure BE dynamic parametersβ
You can configure a dynamic parameter of a BE node by using the curl command.
curl -XPOST http://be_host:http_port/api/update_config?<configuration_item>=<value>
Configure BE static parametersβ
You can only set the static parameters of a BE by changing them in the corresponding configuration file be.conf, and restarting the BE to allow the changes to take effect.
Understand BE Parametersβ
Loggingβ
diagnose_stack_trace_interval_msβ
- Default: 1800000 (30 minutes)
- Type: Int
- Unit: Milliseconds
- Is mutable: Yes
- Description: Controls the minimum time gap between successive stack-trace diagnostics performed by DiagnoseDaemon for
STACK_TRACErequests. When a diagnose request arrives, the daemon skips collecting and logging stack traces if the last collection happened less thandiagnose_stack_trace_interval_msmilliseconds ago. Increase this value to reduce CPU overhead and log volume from frequent stack dumps; decrease it to capture more frequent traces to debug transient issues (for example, in load fail-point simulations of longTabletsChannel::add_chunkblocking). - Introduced in: v3.5.0
lake_replication_slow_log_msβ
- Default: 30000
- Type: Int
- Unit: Milliseconds
- Is mutable: Yes
- Description: Threshold for emitting slow-log entries during lake replication. After each file copy the code measures elapsed time in microseconds and marks the operation as slow when elapsed time is greater than or equal to
lake_replication_slow_log_ms * 1000. When triggered, StarRocks writes an INFO log with file size, cost and trace metrics for that replicated file. Increase the value to reduce noisy slow logs for large/slow transfers; decrease it to detect and surface smaller slow-copy events sooner. - Introduced in: -
load_rpc_slow_log_frequency_threshold_secondsβ
- Default: 60
- Type: Int
- Unit: Seconds
- Is mutable: Yes
- Description: Controls how frequently the system prints slow-log entries for load RPCs that exceed their configured RPC timeout. The slow-log also includes the load channel runtime profile. Setting this value to 0 causes per-timeout logging in practice.
- Introduced in: v3.4.3, v3.5.0
log_buffer_levelβ
- Default: Empty string
- Type: String
- Unit: -
- Is mutable: No
- Description: The strategy for flushing logs. The default value indicates that logs are buffered in memory. Valid values are
-1and0.-1indicates that logs are not buffered in memory. - Introduced in: -
pprof_profile_dirβ
- Default:
${STARROCKS_HOME}/log - Type: String
- Unit: -
- Is mutable: No
- Description: Directory path where StarRocks writes pprof artifacts (Jemalloc heap snapshots and gperftools CPU profiles).
- Introduced in: v3.2.0
sys_log_dirβ
- Default:
${STARROCKS_HOME}/log - Type: String
- Unit: -
- Is mutable: No
- Description: The directory that stores system logs (including INFO, WARNING, ERROR, and FATAL).
- Introduced in: -
sys_log_levelβ
- Default: INFO
- Type: String
- Unit: -
- Is mutable: Yes (from v3.3.0, v3.2.7, and v3.1.12)
- Description: The severity levels into which system log entries are classified. Valid values: INFO, WARN, ERROR, and FATAL. This item was changed to a dynamic configuration from v3.3.0, v3.2.7, and v3.1.12 onwards.
- Introduced in: -
sys_log_roll_modeβ
- Default: SIZE-MB-1024
- Type: String
- Unit: -
- Is mutable: No
- Description: The mode in which system logs are segmented into log rolls. Valid values include
TIME-DAY,TIME-HOUR, andSIZE-MB-size. The default value indicates that logs are segmented into rolls, each of which is 1 GB. - Introduced in: -
sys_log_roll_numβ
- Default: 10
- Type: Int
- Unit: -
- Is mutable: No
- Description: The number of log rolls to reserve.
- Introduced in: -
sys_log_timezoneβ
- Default: false
- Type: Boolean
- Unit: -
- Is mutable: No
- Description: Whether to show timezone information in the log prefix.
trueindicates to show timezone information,falseindicates not to show. - Introduced in: -
sys_log_verbose_levelβ
- Default: 10
- Type: Int
- Unit: -
- Is mutable: No
- Description: The level of the logs to be printed. This configuration item is used to control the output of logs initiated with VLOG in codes.
- Introduced in: -
sys_log_verbose_modulesβ
- Default:
- Type: Strings
- Unit: -
- Is mutable: No
- Description: Specifies the file names (without extensions) or file name wildcards for which VLOG logs should be printed. Multiple file names can be separated by commas. For example, if you set this configuration item to
storage_engine,tablet_manager, StarRocks prints VLOG logs from the storage_engine.cpp and tablet_manager.cpp files. You can also use wildcards, e.g., set to*to print VLOG logs from all files. The VLOG log printing level is controlled by thesys_log_verbose_levelparameter. - Introduced in: -
Serverβ
abort_on_large_memory_allocationβ
- Default: false
- Type: Boolean
- Unit: -
- Is mutable: Yes
- Description: When a single allocation request exceeds the configured large-allocation threshold (g_large_memory_alloc_failure_threshold
>0 and requested size>threshold), this flag controls how the process responds. If true, StarRocks calls std::abort() immediately (hard crash) when such a large allocation is detected. If false, the allocation is blocked and the allocator returns failure (nullptr or ENOMEM) so callers can handle the error. This check only takes effect for allocations that are not wrapped with the TRY_CATCH_BAD_ALLOC path (the mem hook uses a different flow when bad-alloc is being caught). Enable for fail-fast debugging of unexpected huge allocations; keep disabled in production unless you want an immediate process abort on over-large allocation attempts. - Introduced in: v3.4.3, 3.5.0, 4.0.0
arrow_flight_portβ
- Default: -1
- Type: Int
- Unit: -
- Is mutable: No
- Description: TCP port for the BE Arrow Flight SQL server.
-1indicaes to disable the Arrow Flight service. On non-macOS builds, BE invokes Arrow Flight SQL Server with this port during startup; if the port is unavailable, the server startup fails and the BE process exits. The configured port is reported to the FE in the heartbeat payload. - Introduced in: v3.4.0, v3.5.0
be_exit_after_disk_write_hang_secondβ
- Default: 60
- Type: Int
- Unit: Seconds
- Is mutable: No
- Description: The length of time that the BE waits to exit after the disk hangs.
- Introduced in: -
be_http_num_workersβ
- Default: 48
- Type: Int
- Unit: -
- Is mutable: No
- Description: The number of threads used by the HTTP server.
- Introduced in: -
be_http_portβ
- Default: 8040
- Type: Int
- Unit: -
- Is mutable: No
- Description: The BE HTTP server port.
- Introduced in: -
be_portβ
- Default: 9060
- Type: Int
- Unit: -
- Is mutable: No
- Description: The BE thrift server port, which is used to receive requests from FEs.
- Introduced in: -
be_service_threadsβ
- Default: 64
- Type: Int
- Unit: Threads
- Is mutable: No
- Description: Number of worker threads the BE Thrift server uses to serve backend RPC/execution requests. This value is passed to ThriftServer when creating the BackendService and controls how many concurrent request handlers are available; requests are queued when all worker threads are busy. Tune based on expected concurrent RPC load and available CPU/memory: increasing it raises concurrency but also per-thread memory and context-switch cost, decreasing it limits parallel handling and may increase request latency.
- Introduced in: v3.2.0
brpc_connection_typeβ
- Default:
"single" - Type: string
- Unit: -
- Is mutable: No
- Description: The bRPC channel connection mode. Valid values:
"single"(Default): One persistent TCP connection for each channel."pooled": A pool of persistent connections for higher concurrency at the cost of more sockets/file descriptors."short": Shortβlived connections created per RPC to reduce persistent resource usage but with higher latency. The choice affects per-socket buffering behavior and can influenceSocket.Writefailures (EOVERCROWDED) when unwritten bytes exceed socket limits.
- Introduced in: v3.2.5
brpc_max_body_sizeβ
- Default: 2147483648
- Type: Int
- Unit: Bytes
- Is mutable: No
- Description: The maximum body size of a bRPC.
- Introduced in: -
brpc_max_connections_per_serverβ
- Default: 1
- Type: Int
- Unit: -
- Is mutable: No
- Description: The maximum number of persistent bRPC connections the client keeps for each remote server endpoint. For each endpoint
BrpcStubCachecreates aStubPoolwhose_stubsvector is reserved to this size. On first accesses, new stubs are created until the limit is reached. After that, existing stubs are returned in a roundβrobin fashion. Increasing this value raises perβendpoint concurrency (reduces contention on a single channel) at the cost of more file descriptors, memory, and channels. - Introduced in: v3.2.0
brpc_num_threadsβ
- Default: -1
- Type: Int
- Unit: -
- Is mutable: No
- Description: The number of bthreads of a bRPC. The value
-1indicates the same number with the CPU threads. - Introduced in: -
brpc_portβ
- Default: 8060
- Type: Int
- Unit: -
- Is mutable: No
- Description: The BE bRPC port, which is used to view the network statistics of bRPCs.
- Introduced in: -
brpc_socket_max_unwritten_bytesβ
- Default: 1073741824
- Type: Int
- Unit: Bytes
- Is mutable: No
- Description: Sets the per-socket limit for unwritten outbound bytes in the bRPC server. When the amount of buffered, not-yet-written data on a socket reaches this limit, subsequent
Socket.Writecalls fail with EOVERCROWDED. This prevents unbounded per-connection memory growth but can cause RPC send failures for very large messages or slow peers. Align this value withbrpc_max_body_sizeto ensure single-message bodies are not larger than the allowed unwritten buffer. Increasing the value raises memory usage per connection. - Introduced in: v3.2.0
brpc_stub_expire_sβ
- Default: 3600
- Type: Int
- Unit: Seconds
- Is mutable: Yes
- Description: The expire time of bRPC stub cache. The default value is 60 minutes.
- Introduced in: -
compress_rowbatchesβ
- Default: true
- Type: Boolean
- Unit: -
- Is mutable: No
- Description: A boolean value to control whether to compress the row batches in RPCs between BEs.
trueindicates compressing the row batches, andfalseindicates not compressing them. - Introduced in: -
consistency_max_memory_limit_percentβ
- Default: 20
- Type: Int
- Unit: -
- Is mutable: No
- Description: Percentage cap used to compute the memory budget for consistency-related tasks. During BE startup, the final consistency limit is computed as the minimum of the value parsed from
consistency_max_memory_limit(bytes) and (process_mem_limit * consistency_max_memory_limit_percent / 100). Ifprocess_mem_limitis unset (-1), consistency memory is considered unlimited. Forconsistency_max_memory_limit_percent, values less than 0 or greater than 100 are treated as 100. Adjusting this value increases or decreases memory reserved for consistency operations and therefore affects memory available for queries and other services. - Introduced in: v3.2.0
delete_worker_count_normal_priorityβ
- Default: 2
- Type: Int
- Unit: Threads
- Is mutable: No
- Description: Number of normal-priority worker threads dedicated to handling delete (REALTIME_PUSH with DELETE) tasks on the BE agent. At startup this value is added to delete_worker_count_high_priority to size the DeleteTaskWorkerPool (see agent_server.cpp). The pool assigns the first delete_worker_count_high_priority threads as HIGH priority and the rest as NORMAL; normal-priority threads process standard delete tasks and contribute to overall delete throughput. Increase to raise concurrent delete capacity (higher CPU/IO usage); decrease to reduce resource contention.
- Introduced in: v3.2.0
disable_mem_poolsβ
- Default: false
- Type: Boolean
- Unit: -
- Is mutable: No
- Description: Whether to disable MemPool. When this item is set to
true, the MemPool chunk pooling is disabled so each allocation gets its own sized chunk instead of reusing or increasing pooled chunks. Disabling pooling reduces long-lived retained buffer memory at the cost of more frequent allocations, increased number of chunks, and skipped integrity checks (which are avoided because of the large chunk count). Keepdisable_mem_poolsasfalse(default) to benefit from allocation reuse and fewer system calls. Set it totrueonly when you must avoid large pooled memory retention (for example, low-memory environments or diagnostic runs). - Introduced in: v3.2.0
enable_httpsβ
- Default: false
- Type: Boolean
- Unit: -
- Is mutable: No
- Description: When this item is set to
true, the BE's bRPC server is configured to use TLS:ServerOptions.ssl_optionswill be populated with the certificate and private key specified byssl_certificate_pathandssl_private_key_pathat BE startup. This enables HTTPS/TLS for incoming bRPC connections; clients must connect using TLS. Ensure the certificate and key files exist, are accessible to the BE process, and match bRPC/SSL expectations. - Introduced in: v4.0.0
enable_jemalloc_memory_trackerβ
- Default: true
- Type: Boolean
- Unit: -
- Is mutable: No
- Description: When this item is set to
true, the BE starts a background thread (jemalloc_tracker_daemon) that polls jemalloc statistics (once per second) and updates the GlobalEnv jemalloc metadata MemTracker with the jemalloc "stats.metadata" value. This ensures jemalloc metadata consumption is included in StarRocks process memory accounting and prevents underβreporting of memory used by jemalloc internals. The tracker is only compiled/started on nonβmacOS builds (#ifndef APPLE) and runs as a daemon thread named "jemalloc_tracker_daemon". Because this setting affects startup behaviour and threads that maintain MemTracker state, changing it requires a restart. Disable only if jemalloc is not used or when jemalloc tracking is intentionally managed differently; otherwise keep enabled to maintain accurate memory accounting and allocation safeguards. - Introduced in: v3.2.12
enable_jvm_metricsβ
- Default: false
- Type: Boolean
- Unit: -
- Is mutable: No
- Description: Controls whether the system initializes and registers JVM-specific metrics at startup. When enabled the metrics subsystem will create JVM-related collectors (for example, heap, GC and thread metrics) for export, and when disabled, those collectors are not initialized. This parameter is intended for forward compatibility and may be removed in a future release. Use
enable_system_metricsto control system-level metric collection. - Introduced in: v4.0.0
get_pindex_worker_countβ
- Default: 0
- Type: Int
- Unit: -
- Is mutable: Yes
- Description: Sets the number of worker threads for the "get_pindex" thread pool in UpdateManager, which is used to load / fetch persistent index data (used when applying rowsets for primary-key tables). At runtime, a config update will adjust the pool's maximum threads: if
>0that value is applied; if 0 the runtime callback uses the number of CPU cores (CpuInfo::num_cores()). On initialization the pool's max threads is computed as max(get_pindex_worker_count, max_apply_thread_cnt * 2) where max_apply_thread_cnt is the apply-thread pool maximum. Increase to raise parallelism for pindex loading; lowering reduces concurrency and memory/CPU usage. - Introduced in: v3.2.0
heartbeat_service_portβ
- Default: 9050
- Type: Int
- Unit: -
- Is mutable: No
- Description: The BE heartbeat service port, which is used to receive heartbeats from FEs.
- Introduced in: -
heartbeat_service_thread_countβ
- Default: 1
- Type: Int
- Unit: -
- Is mutable: No
- Description: The thread count of the BE heartbeat service.
- Introduced in: -
local_library_dirβ
- Default:
${UDF_RUNTIME_DIR} - Type: string
- Unit: -
- Is mutable: No
- Description: Local directory on the BE where UDF (user-defined function) libraries are staged and where Python UDF worker processes operate. StarRocks copies UDF libraries from HDFS into this path, creates per-worker Unix domain sockets at
<local_library_dir>/pyworker_<pid>, and chdirs Python worker processes into this directory before exec. The directory must exist, be writable by the BE process, and reside on a filesystem that supports Unix domain sockets (i.e., a local filesystem). Because this config is immutable at runtime, set it before startup and ensure adequate permissions and disk space on each BE. - Introduced in: v3.2.0
max_transmit_batched_bytesβ
- Default: 262144
- Type: Int
- Unit: Bytes
- Is mutable: No
- Description: Maximum number of serialized bytes to accumulate in a single transmit request before it is flushed to the network. Sender implementations add serialized ChunkPB payloads into a PTransmitChunkParams request and send the request once the accumulated bytes exceed
max_transmit_batched_bytesor when EOS is reached. Increase this value to reduce RPC frequency and improve throughput at the cost of higher per-request latency and memory use; reduce it to lower latency and memory but increase RPC rate. - Introduced in: v3.2.0
mem_limitβ
- Default: 90%
- Type: String
- Unit: -
- Is mutable: No
- Description: BE process memory upper limit. You can set it as a percentage ("80%") or a physical limit ("100G"). The default hard limit is 90% of the server's memory size, and the soft limit is 80%. You need to configure this parameter if you want to deploy StarRocks with other memory-intensive services on a same server.
- Introduced in: -
memory_max_alignmentβ
- Default: 16
- Type: Int
- Unit: Bytes
- Is mutable: No
- Description: Sets the maximum byte alignment that MemPool will accept for aligned allocations. Increase this value only when callers require larger alignment (for SIMD, device buffers, or ABI constraints). Larger values increase per-allocation padding and reserved memory waste and must remain within what the system allocator and platform support.
- Introduced in: v3.2.0
memory_urgent_levelβ
- Default: 85
- Type: long
- Unit: Percentage (0-100)
- Is mutable: Yes
- Description: The emergency memory waterβlevel expressed as a percentage of the process memory limit. When process memory consumption exceeds
(limit * memory_urgent_level / 100), BE triggers immediate memory reclamation, which forces data cache shrinkage, evicts update caches, and causes persistent/lake MemTables to be treated as "full" so they will be flushed/compacted soon. The code validates that this setting must be greater thanmemory_high_level, andmemory_high_levelmust be greater or equal to1, and less thant or equal to100). A lower value causes more aggressive, earlier reclamation, that is, more frequent cache evictions and flushes. A higher value delays reclamation and risks OOM if too close to 100. Tune this item together withmemory_high_leveland Data Cache-related autoβadjust settings. - Introduced in: v3.2.0
net_use_ipv6_when_priority_networks_emptyβ
- Default: false
- Type: Boolean
- Unit: -
- Is mutable: No
- Description: A boolean value to control whether to use IPv6 addresses preferentially when
priority_networksis not specified.trueindicates to allow the system to use an IPv6 address preferentially when the server that hosts the node has both IPv4 and IPv6 addresses andpriority_networksis not specified. - Introduced in: v3.3.0
num_coresβ
- Default: 0
- Type: Int
- Unit: Cores
- Is mutable: No
- Description: Controls the number of CPU cores the system will use for CPU-aware decisions (for example, thread-pool sizing and runtime scheduling). A value of 0 enables auto-detection: the system reads
/proc/cpuinfoand uses all available cores. If set to a positive integer, that value overrides the detected core count and becomes the effective core count. When running inside containers, cgroup cpuset or cpu quota settings can further restrict usable cores;CpuInfoalso respects those cgroup limits. - Introduced in: v3.2.0
plugin_pathβ
- Default:
${STARROCKS_HOME}/plugin - Type: String
- Unit: -
- Is mutable: No
- Description: Filesystem directory where StarRocks loads external plugins (dynamic libraries, connector artifacts, UDF binaries, etc.).
plugin_pathshould point to a directory accessible by the BE process (read and execute permissions) and must exist before plugins are loaded. Ensure correct ownership and that plugin files use the platform's native binary extension (for example, .so on Linux). - Introduced in: v3.2.0
priority_networksβ
- Default: An empty string
- Type: String
- Unit: -
- Is mutable: No
- Description: Declares a selection strategy for servers that have multiple IP addresses. Note that at most one IP address must match the list specified by this parameter. The value of this parameter is a list that consists of entries, which are separated with semicolons (;) in CIDR notation, such as
10.10.10.0/24. If no IP address matches the entries in this list, an available IP address of the server will be randomly selected. From v3.3.0, StarRocks supports deployment based on IPv6. If the server has both IPv4 and IPv6 addresses, and this parameter is not specified, the system uses an IPv4 address by default. You can change this behavior by settingnet_use_ipv6_when_priority_networks_emptytotrue. - Introduced in: -
rpc_compress_ratio_thresholdβ
- Default: 1.1
- Type: Double
- Unit: -
- Is mutable: Yes
- Description: Threshold (uncompressed_size / compressed_size) used when deciding whether to send serialized row-batches over the network in compressed form. When compression is attempted (e.g., in DataStreamSender, exchange sink, tablet sink index channel, dictionary cache writer), StarRocks computes compress_ratio = uncompressed_size / compressed_size; it uses the compressed payload only if compress_ratio
>rpc_compress_ratio_threshold. With the default 1.1, compressed data must be at least ~9.1% smaller than uncompressed to be used. Lower the value to prefer compression (more CPU for smaller bandwidth savings); raise it to avoid compression overhead unless it yields larger size reductions. Note: this applies to RPC/shuffle serialization and is effective only when row-batch compression is enabled (compress_rowbatches). - Introduced in: v3.2.0
ssl_private_key_pathβ
- Default: An empty string
- Type: String
- Unit: -
- Is mutable: No
- Description: File system path to the TLS/SSL private key (PEM) that the BE's brpc server uses as the private key for the default certificate. When
enable_httpsis set totrue, the system setsbrpc::ServerOptions::ssl_options().default_cert.private_keyto this path at process start. The file must be accessible by the BE process and must match the certificate provided byssl_certificate_path. If this value is not set or the file is missing or unaccessible, HTTPS will not be configured and the bRPC server may fail to start. Protect this file with restrictive filesystem permissions (for example, 600). - Introduced in: v4.0.0
thrift_client_retry_interval_msβ
- Default: 100
- Type: Int
- Unit: Milliseconds
- Is mutable: Yes
- Description: The time interval at which a thrift client retries.
- Introduced in: -
thrift_connect_timeout_secondsβ
- Default: 3
- Type: Int
- Unit: Seconds
- Is mutable: No
- Description: Connection timeout (in seconds) used when creating Thrift clients. ClientCacheHelper::_create_client multiplies this value by 1000 and passes it to ThriftClientImpl::set_conn_timeout(), so it controls the TCP/connect handshake timeout for new Thrift connections opened by the BE client cache. This setting affects only connection establishment; send/receive timeouts are configured separately. Very small values can cause spurious connection failures on high-latency networks, while large values delay detection of unreachable peers.
- Introduced in: v3.2.0
thrift_portβ
- Default: 0
- Type: Int
- Unit: -
- Is mutable: No
- Description: Port used to export the internal Thrift-based BackendService. When the process runs as a Compute Node and this item is set to a non-zero value, it overrides
be_portand the Thrift server binds to this value; otherwisebe_portis used. This configuration is deprecated β setting a non-zerothrift_portlogs a warning advising to usebe_portinstead. - Introduced in: v3.2.0
thrift_rpc_connection_max_valid_time_msβ
- Default: 5000
- Type: Int
- Unit: Milliseconds
- Is mutable: No
- Description: Maximum valid time for a thrift RPC connection. A connection will be closed if it has existed in the connection pool for longer than this value. It must be set consistent with FE configuration
thrift_client_timeout_ms. - Introduced in: -
thrift_rpc_max_body_sizeβ
- Default: 0
- Type: Int
- Unit:
- Is mutable: No
- Description: The maximum string body size of RPC.
0indicates the size is unlimited. - Introduced in: -
thrift_rpc_strict_modeβ
- Default: true
- Type: Boolean
- Unit: -
- Is mutable: No
- Description: Whether thrift's strict execution mode is enabled. For more information on thrift strict mode, see Thrift Binary protocol encoding.
- Introduced in: -
thrift_rpc_timeout_msβ
- Default: 5000
- Type: Int
- Unit: Milliseconds
- Is mutable: Yes
- Description: The timeout for a thrift RPC.
- Introduced in: -
transaction_apply_thread_pool_num_minβ
- Default: 0
- Type: Int
- Unit: Threads
- Is mutable: Yes
- Description: Sets the minimum number of threads for the "update_apply" thread pool in BE's UpdateManager β the pool that applies rowsets for primary-key tables. A value of 0 disables a fixed minimum (no enforced lower bound); when transaction_apply_worker_count is also 0 the pool's max threads defaults to the number of CPU cores, so effective worker capacity equals CPU cores. You can raise this to guarantee a baseline concurrency for applying transactions; setting it too high may increase CPU contention. Changes are applied at runtime via the update_config HTTP handler (it calls update_min_threads on the apply thread pool).
- Introduced in: v3.2.11
transaction_publish_version_thread_pool_num_minβ
- Default: 0
- Type: Int
- Unit: Threads
- Is mutable: Yes
- Description: Sets the minimum number of threads reserved in the AgentServer "publish_version" dynamic thread pool (used to publish transaction versions / handle TTaskType::PUBLISH_VERSION tasks). At startup the pool is created with min = max(config value, MIN_TRANSACTION_PUBLISH_WORKER_COUNT) (MIN_TRANSACTION_PUBLISH_WORKER_COUNT = 1), so the default 0 results in a minimum of 1 thread. Changing this value at runtime invokes the update callback to call ThreadPool::update_min_threads, raising or lowering the pool's guaranteed minimum (but not below the enforced minimum of 1). Coordinate with transaction_publish_version_worker_count (max threads) and transaction_publish_version_thread_pool_idle_time_ms (idle timeout).
- Introduced in: v3.2.11
use_mmap_allocate_chunkβ
- Default: false
- Type: Boolean
- Unit: -
- Is mutable: No
- Description: When this item is set to
true, the system allocates chunks using anonymous private mmap mappings (MAP_ANONYMOUS | MAP_PRIVATE) and frees them with munmap. Enabling this may create many virtual memory mappings, thus you must raise the kernel limit (as root user, runningsysctl -w vm.max_map_count=262144orecho 262144 > /proc/sys/vm/max_map_count), and setchunk_reserved_bytes_limitto a relatively large value. Otherwise, enabling mmap can cause very poor performance due to frequent mapping/unmapping. - Introduced in: v3.2.0
Metadata and cluster managementβ
cluster_idβ
- Default: -1
- Type: Int
- Unit: -
- Is mutable: No
- Description: Global cluster identifier for this StarRocks backend. At startup StorageEngine reads config::cluster_id into its effective cluster id and verifies that all data root paths contain the same cluster id (see StorageEngine::_check_all_root_path_cluster_id). A value of -1 means "unset" β the engine may derive the effective id from existing data directories or from master heartbeats. If a nonβnegative id is configured, any mismatch between configured id and ids stored in data directories will cause startup verification to fail (Status::Corruption). When some roots lack an id and the engine is allowed to write ids (options.need_write_cluster_id), it will persist the effective id into those roots.
- Introduced in: v3.2.0
consistency_max_memory_limitβ
- Default: 10G
- Type: String
- Unit: -
- Is mutable: No
- Description: Memory size specification for the CONSISTENCY memory tracker.
- Introduced in: v3.2.0
make_snapshot_rpc_timeout_msβ
- Default: 20000
- Type: Int
- Unit: Milliseconds
- Is mutable: No
- Description: Sets the Thrift RPC timeout in milliseconds used when making a snapshot on a remote BE. Increase this value when remote snapshot creation regularly exceeds the default timeout; reduce it to fail faster on unresponsive BEs. Note other timeouts may affect end-to-end operations (for example the effective tablet-writer open timeout can relate to
tablet_writer_open_rpc_timeout_secandload_timeout_sec). - Introduced in: v3.2.0
metadata_cache_memory_limit_percentβ
- Default: 30
- Type: Int
- Unit: Percent
- Is mutable: Yes
- Description: Sets the metadata LRU cache size as a percentage of the process memory limit. At startup StarRocks computes cache bytes as (process_mem_limit * metadata_cache_memory_limit_percent / 100) and passes that to the metadata cache allocator. The cache is only used for non-PRIMARY_KEYS rowsets (PK tables are not supported) and is enabled only when metadata_cache_memory_limit_percent > 0; set it <= 0 to disable the metadata cache. Increasing this value raises metadata cache capacity but reduces memory available to other components; tune based on workload and system memory. Not active in BE_TEST builds.
- Introduced in: v3.2.10
retry_apply_interval_secondβ
- Default: 30
- Type: Int
- Unit: Seconds
- Is mutable: Yes
- Description: Base interval (in seconds) used when scheduling retries of failed tablet apply operations. It is used directly to schedule a retry after a submission failure and as the base multiplier for backoff: the next retry delay is calculated as min(600,
retry_apply_interval_second* failed_attempts). The code also usesretry_apply_interval_secondto compute the cumulative retry duration (arithmetic-series sum) which is compared againstretry_apply_timeout_secondto decide whether to keep retrying. Effective only whenenable_retry_applyis true. Increasing this value lengthens both individual retry delays and the cumulative time spent retrying; decreasing it makes retries more frequent and may increase the number of attempts before reachingretry_apply_timeout_second. - Introduced in: v3.2.9
retry_apply_timeout_secondβ
- Default: 7200
- Type: Int
- Unit: Seconds
- Is mutable: Yes
- Description: Maximum cumulative retry time (in seconds) allowed for applying a pending version before the apply process gives up and the tablet enters an error state. The apply logic accumulates exponential/backoff intervals based on
retry_apply_interval_secondand compares the total duration againstretry_apply_timeout_second. Ifenable_retry_applyis true and the error is considered retryable, apply attempts will be rescheduled until the accumulated backoff exceedsretry_apply_timeout_second; then apply stops and the tablet transitions to error. Explicitly non-retryable errors (e.g., Corruption) are not retried regardless of this setting. Tune this value to control how long StarRocks will keep retrying apply operations (default 7200s = 2 hours). - Introduced in: v3.3.13, v3.4.3, v3.5.0
txn_commit_rpc_timeout_msβ
- Default: 60000
- Type: Int
- Unit: Milliseconds
- Is mutable: Yes
- Description: Maximum allowed lifetime (in milliseconds) for Thrift RPC connections used by BE stream-load and transaction commit calls. StarRocks sets this value as the
thrift_rpc_timeout_mson requests sent to FE (used in stream_load planning, loadTxnBegin/loadTxnPrepare/loadTxnCommit, and getLoadTxnStatus). If a connection has been pooled longer than this value it will be closed. When a per-request timeout (ctx->timeout_second) is provided, the BE computes the RPC timeout as rpc_timeout_ms = max(ctx1000/4, min(ctx1000/2, txn_commit_rpc_timeout_ms)), so the effective RPC timeout is bounded by the context and this configuration. Keep this consistent with FE'sthrift_client_timeout_msto avoid mismatched timeouts. - Introduced in: v3.2.0
txn_map_shard_sizeβ
- Default: 128
- Type: Int
- Unit: -
- Is mutable: No
- Description: Number of lock-map shards used by the transaction manager to partition transaction locks and reduce contention. Its value should be a power of two (2^n); increasing it augments concurrency and reduces lock contention at the cost of additional memory and marginal bookkeeping overhead. Choose a shard count sized for expected concurrent transactions and available memory.
- Introduced in: v3.2.0
txn_shard_sizeβ
- Default: 1024
- Type: Int
- Unit: -
- Is mutable: No
- Description: Controls the number of lock shards used by the transaction manager. This value determines the shard size for txn locks. It must be a power of two; Setting it to a larger value reduces lock contention and improves concurrent COMMIT/PUBLISH throughput at the expense of additional memory and finer-grained internal bookkeeping.
- Introduced in: v3.2.0
update_schema_worker_countβ
- Default: 3
- Type: Int
- Unit: Threads
- Is mutable: No
- Description: Sets the maximum number of worker threads in the backend's "update_schema" dynamic ThreadPool that processes TTaskType::UPDATE_SCHEMA tasks. The ThreadPool is created in agent_server during startup with a minimum of 0 threads (it can scale down to zero when idle) and a max equal to this setting; the pool uses the default idle timeout and an effectively unlimited queue. Increase this value to allow more concurrent schema-update tasks (higher CPU and memory usage), or lower it to limit parallel schema operations.
- Introduced in: v3.2.3
update_tablet_meta_info_worker_countβ
- Default: 1
- Type: Int
- Unit: -
- Is mutable: Yes
- Description: Sets the maximum number of worker threads in the backend thread pool that handles tablet metadata update tasks. The thread pool is created during backend startup with a minimum of 0 threads (it can scale down to zero when idle) and a max equal to this setting (clamped to at least 1). Updating this value at runtime adjusts the pool's max threads. Increase it to allow more concurrent metadata-update tasks, or lower it to limit concurrency.
- Introduced in: v4.1.0, v4.0.6, v3.5.13
User, role, and privilegeβ
ssl_certificate_pathβ
- Default:
- Type: String
- Unit: -
- Is mutable: No
- Description: Absolute path to the TLS/SSL certificate file (PEM) that the BE's brpc server will use when enable_https is true. At BE startup this value is copied into
brpc::ServerOptions::ssl_options().default_cert.certificate; you must also setssl_private_key_pathto the matching private key. Provide the server certificate and any intermediate certificates in PEM format (certificate chain) if required by your CA. The file must be readable by the StarRocks BE process and is applied only at startup. If unset or invalid while enable_https is enabled, brpc TLS setup may fail and prevent the server from starting correctly. - Introduced in: v4.0.0
Query engineβ
clear_udf_cache_when_startβ
- Default: false
- Type: Boolean
- Unit: -
- Is mutable: No
- Description: When enabled, the BE's UserFunctionCache will clear all locally cached user function libraries on startup. During UserFunctionCache::init, the code calls _reset_cache_dir(), which removes UDF files from the configured UDF library directory (organized into kLibShardNum subdirectories) and deletes files with Java/Python UDF suffixes (.jar/.py). When disabled (default), the BE loads existing cached UDF files instead of deleting them. Enabling this forces UDF binaries to be re-downloaded on first use after restart (increasing network traffic and first-use latency).
- Introduced in: v4.0.0
dictionary_speculate_min_chunk_sizeβ
- Default: 10000
- Type: Int
- Unit: Rows
- Is mutable: No
- Description: Minimum number of rows (chunk size) used by StringColumnWriter and DictColumnWriter to trigger dictionary-encoding speculation. If an incoming column (or the accumulated buffer plus incoming rows) has size larger than or equal
dictionary_speculate_min_chunk_sizethe writer will run speculation immediately and set an encoding (DICT, PLAIN or BIT_SHUFFLE) rather than buffering more rows. Speculation usesdictionary_encoding_ratiofor string columns anddictionary_encoding_ratio_for_non_string_columnfor numeric/non-string columns to decide whether dictionary encoding is beneficial. Also, a large column byte_size (larger than or equal to UINT32_MAX) forces immediate speculation to avoidBinaryColumn<uint32_t>overflow. - Introduced in: v3.2.0
disable_storage_page_cacheβ
- Default: false
- Type: Boolean
- Unit: -
- Is mutable: Yes
- Description: A boolean value to control whether to disable PageCache.
- When PageCache is enabled, StarRocks caches the recently scanned data.
- PageCache can significantly improve the query performance when similar queries are repeated frequently.
trueindicates disabling PageCache.- The default value of this item has been changed from
truetofalsesince StarRocks v2.4.
- Introduced in: -
enable_bitmap_index_memory_page_cacheβ
- Default: true
- Type: Boolean
- Unit: -
- Is mutable: Yes
- Description: Whether to enable memory cache for Bitmap index. Memory cache is recommended if you want to use Bitmap indexes to accelerate point queries.
- Introduced in: v3.1
enable_compaction_flat_jsonβ
- Default: True
- Type: Boolean
- Unit:
- Is mutable: Yes
- Description: Whether to enable compaction for Flat JSON data.
- Introduced in: v3.3.3
enable_json_flatβ
- Default: false
- Type: Boolean
- Unit:
- Is mutable: Yes
- Description: Whether to enable the Flat JSON feature. After this feature is enabled, newly loaded JSON data will be automatically flattened, improving JSON query performance.
- Introduced in: v3.3.0
enable_lazy_dynamic_flat_jsonβ
- Default: True
- Type: Boolean
- Unit:
- Is mutable: Yes
- Description: Whether to enable Lazy Dyamic Flat JSON when a query misses Flat JSON schema in read process. When this item is set to
true, StarRocks will postpone the Flat JSON operation to calculation process instead of read process. - Introduced in: v3.3.3
enable_ordinal_index_memory_page_cacheβ
- Default: true
- Type: Boolean
- Unit: -
- Is mutable: Yes
- Description: Whether to enable memory cache for ordinal index. Ordinal index is a mapping from row IDs to data page positions, and it can be used to accelerate scans.
- Introduced in: -
enable_string_prefix_zonemapβ
- Default: true
- Type: Boolean
- Unit: -
- Is mutable: Yes
- Description: Whether to enable ZoneMap for string (CHAR/VARCHAR) columns using prefix-based min/max. For non-key string columns, the min/max values are truncated to a fixed prefix length configured by
string_prefix_zonemap_prefix_len. - Introduced in: -
enable_zonemap_index_memory_page_cacheβ
- Default: true
- Type: Boolean
- Unit: -
- Is mutable: Yes
- Description: Whether to enable memory cache for zonemap index. Memory cache is recommended if you want to use zonemap indexes to accelerate scan.
- Introduced in: -
exchg_node_buffer_size_bytesβ
- Default: 10485760
- Type: Int
- Unit: Bytes
- Is mutable: Yes
- Description: The maximum buffer size on the receiver end of an exchange node for each query. This configuration item is a soft limit. A backpressure is triggered when data is sent to the receiver end with an excessive speed.
- Introduced in: -
exec_state_report_max_threadsβ
- Default: 2
- Type: Int
- Unit: Threads
- Is mutable: Yes
- Description: Maximum number of threads for the exec-state-report thread pool. This pool is used by
ExecStateReporterto asynchronously send non-priority execution status reports (such as fragment completion and error status) from BE to FE via RPC. The actual pool size at startup ismax(1, exec_state_report_max_threads). Changing this config at runtime triggersupdate_max_threadson the pool in every executor set (shared and exclusive). The pool has a fixed task queue size of 1000; report submissions are silently dropped when all threads are busy and the queue is full. Paired withpriority_exec_state_report_max_threadsfor the high-priority pool. Increase this value when delayed or dropped exec-state reports are observed under high query concurrency. - Introduced in: v4.1.0, v4.0.8, v3.5.15
file_descriptor_cache_capacityβ
- Default: 16384
- Type: Int
- Unit: -
- Is mutable: No
- Description: The number of file descriptors that can be cached.
- Introduced in: -
flamegraph_tool_dirβ
- Default:
${STARROCKS_HOME}/bin/flamegraph - Type: String
- Unit: -
- Is mutable: No
- Description: Directory of the flamegraph tool, which should contain pprof, stackcollapse-go.pl, and flamegraph.pl scripts for generating flame graphs from profile data.
- Introduced in: -
fragment_pool_queue_sizeβ
- Default: 2048
- Type: Int
- Unit: -
- Is mutable: No
- Description: The upper limit of the query number that can be processed on each BE node.
- Introduced in: -
fragment_pool_thread_num_maxβ
- Default: 4096
- Type: Int
- Unit: -
- Is mutable: No
- Description: The maximum number of threads used for query.
- Introduced in: -
fragment_pool_thread_num_minβ
- Default: 64
- Type: Int
- Unit: Minutes -
- Is mutable: No
- Description: The minimum number of threads used for query.
- Introduced in: -
hdfs_client_enable_hedged_readβ
- Default: false
- Type: Boolean
- Unit: -
- Is mutable: No
- Description: Specifies whether to enable the hedged read feature.
- Introduced in: v3.0
hdfs_client_hedged_read_threadpool_sizeβ
- Default: 128
- Type: Int
- Unit: -
- Is mutable: No
- Description: Specifies the size of the Hedged Read thread pool on your HDFS client. The thread pool size limits the number of threads to dedicate to the running of hedged reads in your HDFS client. It is equivalent to the
dfs.client.hedged.read.threadpool.sizeparameter in the hdfs-site.xml file of your HDFS cluster. - Introduced in: v3.0
hdfs_client_hedged_read_threshold_millisβ
- Default: 2500
- Type: Int
- Unit: Milliseconds
- Is mutable: No
- Description: Specifies the number of milliseconds to wait before starting up a hedged read. For example, you have set this parameter to
30. In this situation, if a read from a block has not returned within 30 milliseconds, your HDFS client immediately starts up a new read against a different block replica. It is equivalent to thedfs.client.hedged.read.threshold.millisparameter in the hdfs-site.xml file of your HDFS cluster. - Introduced in: v3.0
io_coalesce_adaptive_lazy_activeβ
- Default: true
- Type: Boolean
- Unit: -
- Is mutable: Yes
- Description: Based on the selectivity of predicates, adaptively determines whether to combine the I/O of predicate columns and non-predicate columns.
- Introduced in: v3.2
jit_lru_cache_sizeβ
- Default: 0
- Type: Int
- Unit: Bytes
- Is mutable: Yes
- Description: The LRU cache size for JIT compilation. It represents the actual size of the cache if it is set to greater than 0. If it is set to less than or equal to 0, the system will adaptively set the cache using the formula
jit_lru_cache_size = min(mem_limit*0.01, 1GB)(whilemem_limitof the node must be greater or equal to 16 GB). - Introduced in: -
json_flat_column_maxβ
- Default: 100
- Type: Int
- Unit:
- Is mutable: Yes
- Description: The maximum number of sub-fields that can be extracted by Flat JSON. This parameter takes effect only when
enable_json_flatis set totrue. - Introduced in: v3.3.0
json_flat_create_zonemapβ
- Default: true
- Type: Boolean
- Unit:
- Is mutable: Yes
- Description: Whether to create ZoneMaps for flattened JSON sub-columns during write. This parameter takes effect only when
enable_json_flatis set totrue. - Introduced in: -
json_flat_null_factorβ
- Default: 0.3
- Type: Double
- Unit:
- Is mutable: Yes
- Description: The proportion of NULL values in the column to extract for Flat JSON. A column will not be extracted if its proportion of NULL value is higher than this threshold. This parameter takes effect only when
enable_json_flatis set totrue. - Introduced in: v3.3.0
json_flat_sparsity_factorβ
- Default: 0.3
- Type: Double
- Unit:
- Is mutable: Yes
- Description: The proportion of columns with the same name for Flat JSON. Extraction is not performed if the proportion of columns with the same name is lower than this value. This parameter takes effect only when
enable_json_flatis set totrue. - Introduced in: v3.3.0
lake_tablet_ignore_invalid_delete_predicateβ
- Default: false
- Type: Boolean
- Unit: -
- Is mutable: Yes
- Description: A boolean value to control whether ignore invalid delete predicates in tablet rowset metadata which may be introduced by logic deletion to a duplicate key table after the column name renamed.
- Introduced in: v4.0
late_materialization_ratioβ
- Default: 10
- Type: Int
- Unit: -
- Is mutable: No
- Description: Integer ratio in range [0-1000] that controls the use of late materialization in the SegmentIterator (vector query engine). A value of
0(or β€ 0) disables late materialization;1000(or β₯ 1000) forces late materialization for all reads. Values > 0 and < 1000 enable a conditional strategy where both late and early materialization contexts are prepared and the iterator selects behavior based on predicate filter ratios (higher values favor late materialization). When a segment contains complex metric types, StarRocks usesmetric_late_materialization_ratioinstead. Iflake_io_opts.cache_file_onlyis set, late materialization is disabled. - Introduced in: v3.2.0
max_hdfs_file_handleβ
- Default: 1000
- Type: Int
- Unit: -
- Is mutable: Yes
- Description: The maximum number of HDFS file descriptors that can be opened.
- Introduced in: -
max_memory_sink_batch_countβ
- Default: 20
- Type: Int
- Unit: -
- Is mutable: Yes
- Description: The maximum number of Scan Cache batches.
- Introduced in: -
max_pushdown_conditions_per_columnβ
- Default: 1024
- Type: Int
- Unit: -
- Is mutable: Yes
- Description: The maximum number of conditions that allow pushdown in each column. If the number of conditions exceeds this limit, the predicates are not pushed down to the storage layer.
- Introduced in: -
max_scan_key_numβ
- Default: 1024
- Type: Int
- Unit: -
- Is mutable: Yes
- Description: The maximum number of scan keys segmented by each query.
- Introduced in: -
metric_late_materialization_ratioβ
- Default: 1000
- Type: Int
- Unit: -
- Is mutable: No
- Description: Controls when the late-materialization row access strategy is used for reads that include complex metric columns. Valid range: [0-1000].
0disables late materialization;1000forces late materialization for all applicable reads. Values 1β999 enable a conditional strategy where both late and early materialization contexts are prepared and chosen at runtime based on predicate/selectivity. When complex metric types exist,metric_late_materialization_ratiooverrides the generallate_materialization_ratio. Note:cache_file_onlyI/O mode will cause late materialization to be disabled regardless of this setting. - Introduced in: v3.2.0
min_file_descriptor_numberβ
- Default: 60000
- Type: Int
- Unit: -
- Is mutable: No
- Description: The minimum number of file descriptors in the BE process.
- Introduced in: -
object_storage_connect_timeout_msβ
- Default: -1
- Type: Int
- Unit: Milliseconds
- Is mutable: No
- Description: Timeout duration to establish socket connections with object storage.
-1indicates to use the default timeout duration of the SDK configurations. - Introduced in: v3.0.9
object_storage_request_timeout_msβ
- Default: -1
- Type: Int
- Unit: Milliseconds
- Is mutable: No
- Description: Timeout duration to establish HTTP connections with object storage.
-1indicates to use the default timeout duration of the SDK configurations. - Introduced in: v3.0.9
parquet_late_materialization_enableβ
- Default: true
- Type: Boolean
- Unit: -
- Is mutable: No
- Description: A boolean value to control whether to enable the late materialization of Parquet reader to improve performance.
trueindicates enabling late materialization, andfalseindicates disabling it. - Introduced in: -
parquet_page_index_enableβ
- Default: true
- Type: Boolean
- Unit: -
- Is mutable: No
- Description: A boolean value to control whether to enable the pageindex of Parquet file to improve performance.
trueindicates enabling pageindex, andfalseindicates disabling it. - Introduced in: v3.3
parquet_reader_bloom_filter_enableβ
- Default: true
- Type: Boolean
- Unit: -
- Is mutable: Yes
- Description: A boolean value to control whether to enable the bloom filter of Parquet file to improve performance.
trueindicates enabling the bloom filter, andfalseindicates disabling it. You can also control this behavior on session level using the system variableenable_parquet_reader_bloom_filter. Bloom filters in Parquet are maintained at the column level within each row group. If a Parquet file contains bloom filters for certain columns, queries can use predicates on those columns to efficiently skip row groups. - Introduced in: v3.5
path_gc_check_stepβ
- Default: 1000
- Type: Int
- Unit: -
- Is mutable: Yes
- Description: The maximum number of files that can be scanned continuously each time.
- Introduced in: -
path_gc_check_step_interval_msβ
- Default: 10
- Type: Int
- Unit: Milliseconds
- Is mutable: Yes
- Description: The time interval between file scans.
- Introduced in: -
path_scan_interval_secondβ
- Default: 86400
- Type: Int
- Unit: Seconds
- Is mutable: Yes
- Description: The time interval at which GC cleans expired data.
- Introduced in: -
pipeline_connector_scan_thread_num_per_cpuβ
- Default: 8
- Type: Double
- Unit: -
- Is mutable: Yes
- Description: The number of scan threads assigned to Pipeline Connector per CPU core in the BE node. This configuration is changed to dynamic from v3.1.7 onwards.
- Introduced in: -
pipeline_poller_timeout_guard_msβ
- Default: -1
- Type: Int
- Unit: Milliseconds
- Is mutable: Yes
- Description: When this item is set to greater than
0, if a driver takes longer thanpipeline_poller_timeout_guard_msfor a single dispatch in the poller, then the information of the driver and operator is printed. - Introduced in: -
pipeline_prepare_thread_pool_queue_sizeβ
- Default: 102400
- Type: Int
- Unit: -
- Is mutable: No
- Description: The maximum queue lenggth of PREPARE fragment thread pool for Pipeline execution engine.
- Introduced in: -
pipeline_prepare_thread_pool_thread_numβ
- Default: 0
- Type: Int
- Unit: -
- Is mutable: No
- Description: Number of threads in the pipeline execution engine PREPARE fragment thread pool.
0indicates the value is equal to the number of system VCPU core number. - Introduced in: -
pipeline_prepare_timeout_guard_msβ
- Default: -1
- Type: Int
- Unit: Milliseconds
- Is mutable: Yes
- Description: When this item is set to greater than
0, if a plan fragment exceedspipeline_prepare_timeout_guard_msduring the PREPARE process, a stack trace of the plan fragment is printed. - Introduced in: -
pipeline_scan_thread_pool_queue_sizeβ
- Default: 102400
- Type: Int
- Unit: -
- Is mutable: No
- Description: The maximum task queue length of SCAN thread pool for Pipeline execution engine.
- Introduced in: -
pk_index_parallel_get_threadpool_sizeβ
- Default: 1048576
- Type: Int
- Unit: -
- Is mutable: Yes
- Description: Sets the maximum queue size (number of pending tasks) for the "cloud_native_pk_index_get" thread pool used by PK index parallel get operations in shared-data (cloud-native/lake) mode. The actual thread count for that pool is controlled by
pk_index_parallel_get_threadpool_max_threads; this setting only limits how many tasks may be queued awaiting execution. The very large default (2^20) effectively makes the queue unbounded; lowering it prevents excessive memory growth from queued tasks but may cause task submissions to block or fail when the queue is full. Tune together withpk_index_parallel_get_threadpool_max_threadsbased on workload concurrency and memory constraints. - Introduced in: -
priority_exec_state_report_max_threadsβ
- Default: 2
- Type: Int
- Unit: Threads
- Is mutable: Yes
- Description: Maximum number of threads for the high-priority exec-state-report thread pool. This pool is used by
ExecStateReporterto asynchronously send high-priority execution status reports (such as urgent fragment failures) from BE to FE via RPC. Unlike the normal exec-state-report pool, this pool has an unbounded task queue. The actual pool size at startup ismax(1, priority_exec_state_report_max_threads). Changing this config at runtime triggersupdate_max_threadson the priority pool in every executor set (shared and exclusive). Paired withexec_state_report_max_threadsfor the normal pool. Increase this value when high-priority reports are delayed under heavy concurrent query loads. - Introduced in: v4.1.0, v4.0.8, v3.5.15
priority_queue_remaining_tasks_increased_frequencyβ
- Default: 512
- Type: Int
- Unit: -
- Is mutable: Yes
- Description: Controls how often the BlockingPriorityQueue increases ("ages") the priority of all remaining tasks to avoid starvation. Each successful get/pop increments an internal
_upgrade_counter; when_upgrade_counterexceedspriority_queue_remaining_tasks_increased_frequency, the queue increments every element's priority, rebuilds the heap, and resets the counter. Lower values cause more frequent priority aging (reducing starvation but increasing CPU cost due to iterating and re-heapifying); higher values reduce that overhead but delay priority adjustments. The value is a simple operation count threshold, not a time duration. - Introduced in: v3.2.0
query_cache_capacityβ
- Default: 536870912
- Type: Int
- Unit: Bytes
- Is mutable: No
- Description: The size of the query cache in the BE. The default size is 512 MB. The size cannot be less than 4 MB. If the memory capacity of the BE is insufficient to provision your expected query cache size, you can increase the memory capacity of the BE.
- Introduced in: -
query_pool_spill_mem_limit_thresholdβ
- Default: 1.0
- Type: Double
- Unit: -
- Is mutable: No
- Description: If automatic spilling is enabled, when the memory usage of all queries exceeds
query_pool memory limit * query_pool_spill_mem_limit_threshold, intermediate result spilling will be triggered. - Introduced in: v3.2.7
query_scratch_dirsβ
- Default:
${STARROCKS_HOME} - Type: string
- Unit: -
- Is mutable: No
- Description: Comma-separated list of writable scratch directories used by query execution to spill intermediate data (for example, external sorts, hash joins, and other operators). Specify one or more paths separated by
;(e.g./mnt/ssd1/tmp;/mnt/ssd2/tmp). Directories should be accessible and writable by the BE process and have sufficient free space; StarRocks will pick among them to distribute spill I/O. Changes require a restart to take effect. If a directory is missing, not writable, or full, spilling may fail or degrade query performance. - Introduced in: v3.2.0
result_buffer_cancelled_interval_timeβ
- Default: 300
- Type: Int
- Unit: Seconds
- Is mutable: Yes
- Description: The wait time before BufferControlBlock releases data.
- Introduced in: -
scan_context_gc_interval_minβ
- Default: 5
- Type: Int
- Unit: Minutes
- Is mutable: Yes
- Description: The time interval at which to clean the Scan Context.
- Introduced in: -
scanner_row_numβ
- Default: 16384
- Type: Int
- Unit: -
- Is mutable: Yes
- Description: The maximum row count returned by each scan thread in a scan.
- Introduced in: -
scanner_thread_pool_queue_sizeβ
- Default: 102400
- Type: Int
- Unit: -
- Is mutable: No
- Description: The number of scan tasks supported by the storage engine.
- Introduced in: -
scanner_thread_pool_thread_numβ
- Default: 48
- Type: Int
- Unit: -
- Is mutable: Yes
- Description: The number of threads which the storage engine used for concurrent storage volume scanning. All threads are managed in the thread pool.
- Introduced in: -
string_prefix_zonemap_prefix_lenβ
- Default: 16
- Type: Int
- Unit: -
- Is mutable: Yes
- Description: Prefix length used for string ZoneMap min/max when
enable_string_prefix_zonemapis enabled. - Introduced in: -
udf_thread_pool_sizeβ
- Default: 1
- Type: Int
- Unit: Threads
- Is mutable: No
- Description: Sets the size of the UDF call PriorityThreadPool created in ExecEnv (used for executing user-defined functions / UDF-related tasks). The value is used as the pool thread count and also as the pool queue capacity when constructing the thread pool (PriorityThreadPool("udf", thread_num, queue_size)). Increase to allow more concurrent UDF executions; keep small to avoid excessive CPU and memory contention.
- Introduced in: v3.2.0
update_memory_limit_percentβ
- Default: 60
- Type: Int
- Unit: Percent
- Is mutable: No
- Description: Fraction of the BE process memory reserved for update-related memory and caches. During startup
GlobalEnvcomputes theMemTrackerfor updates as process_mem_limit * clamp(update_memory_limit_percent, 0, 100) / 100.UpdateManageralso uses this percentage to size its primary-index/index-cache capacity (index cache capacity = GlobalEnv::process_mem_limit * update_memory_limit_percent / 100). The HTTP config update logic registers a callback that callsupdate_primary_index_memory_limiton the update managers, so changes would be applied to the update subsystem if the config were changed. Increasing this value gives more memory to update/primary-index paths (reducing memory available for other pools); decreasing it reduces update memory and cache capacity. Values are clamped to the range 0β100. - Introduced in: v3.2.0
vector_chunk_sizeβ
- Default: 4096
- Type: Int
- Unit: Rows
- Is mutable: No
- Description: The number of rows per vectorized chunk (batch) used throughout the execution and storage code paths. This value controls Chunk and RuntimeState batch_size creation, affects operator throughput, memory footprint per operator, spill and sort buffer sizing, and I/O heuristics (for example, ORC writer natural write size). Increasing it can improve CPU and I/O efficiency for wide/CPU-bound workloads but raises peak memory usage and can increase latency for small-result queries. Tune only when profiling shows batch-size is a bottleneck; otherwise keep the default for balanced memory and performance.
- Introduced in: v3.2.0
Loadingβ
clear_transaction_task_worker_countβ
- Default: 1
- Type: Int
- Unit: -
- Is mutable: No
- Description: The number of threads used for clearing transaction.
- Introduced in: -
column_mode_partial_update_insert_batch_sizeβ
- Default: 4096
- Type: Int
- Unit: -
- Is mutable: Yes
- Description: Batch size for column mode partial update when processing inserted rows. If this item is set to
0or negative, it will be clamped to1to avoid infinite loop. This item controls the number of newly inserted rows processed in each batch. Larger values can improve write performance but will consume more memory. - Introduced in: v3.5.10, v4.0.2
enable_load_spill_parallel_mergeβ
- Default: true
- Type: Boolean
- Unit: -
- Is mutable: Yes
- Description: Specifies whether to enable parallel spill merge within a single tablet. Enabling this can improve the performance of spill merge during data loading.
- Introduced in: -