性能调优

最近更新时间: 2026-03-13 09:03:00

类型模块参数备注
公共参数BEstorage_root_path/data/emr/starrocks/be/storage,medium:hdd;/data1/emr/starrocks/be/storage,medium:hdd;/data2/emr/starrocks/be/storage,medium:hdd;/data3/emr/starrocks/be/storage,medium:hdd;/data4/emr/starrocks/be/storage,medium:hdd;提升磁盘io吞吐量,利用多磁盘优势,数据会自动平均分配到多个磁盘,磁盘挂了会导致BE启动失败,需要摘除失败的磁盘,再启动BE
BEdatacache_disk_path/data/emr/starrocks/be/datacache/;/data1/emr/starrocks/be/datacache/;/data2/emr/starrocks/be/datacache/;/data3/emr/starrocks/be/datacache/;/data4/emr/starrocks/be/datacache/;
BEdisable_storage_page_cachefalse启动操作系统缓存,多次查询性能提升明显
系统参数query_mem_limitxxx如果查询结果很大,可以适当调大该值,但需要根据系统内存调整
BEstorage_page_cache_limitxxxPageCache 的容量,可写为容量大小,也可以写为 PageCache 占系统内存的比例,例如,20%。该参数仅在 disable_storage_page_cache 为 false 时生效。
FEignore_unknown_log_idtrue升级后如果碰到问题需要回滚,请在 fe.conf 文件中增加 ignore_unknown_log_id=true。这是因为新版本的元数据日志新增了类型,如果不加这个参数,则无法回滚。
BEdatacache_disk_size128849018880主要用于存算分离,单个磁盘缓存数据量的上限,可设为比例上限(如 80%)或物理上限(如 2T, 500G 等)。举例:在 datacache_disk_path 中配置了 2 个磁盘,并设置 datacache_disk_size 参数值为 21474836480,即 20 GB,那么最多可缓存 40 GB 的磁盘数据。默认值为 0,即仅使用内存作为缓存介质,不使用磁盘
BEquery_cache_capacity4G指定 Query Cache 的大小。默认为 512 MB。最小不低于 4 MB。如果当前的 BE 内存容量无法满足您期望的 Query Cache 大小,可以增加 BE 的内存容量,然后再设置合理的 Query Cache 大小。每个 BE 都有自己私有的 Query Cache 存储空间,BE 只 Populate 或 Probe 自己本地的 Query Cache 存储空间。
BEtablet_max_versions2000每个 Tablet 上允许的最大版本数。如果超过该值,新的写入请求会失败。
FEenable_collect_query_detail_infotrue是否收集查询的 Profile 信息。设置为 true 时,系统会收集查询的 Profile。设置为 false 时,系统不会收集查询的 profile。
BE/FEJAVA_OPTS-Djava.security.krb5.conf=/etc/krb5.conf -Dlog4j2.formatMsgNoLookups=true -Xmx32768m -XX:+UseMembar -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=7 -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+UseG1GC -verbose:gc -XX:-CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=80 -XX:SoftRefLRUPolicyMSPerMB=0 -Xloggc:${LOG_DIR}/gc_starrocks_fe.log.$DATE -XX:+PrintConcurrentLocks根据节点内存修改-Xmx
BE/FEJAVA_OPTS_FOR_JDK_11-Dlog4j2.formatMsgNoLookups=true -Xmx32768m -XX:+UseG1GC -Xlog:gc*:${LOG_DIR}/fe.gc.log.$DATE:time修改-Xmx 为32G
建表语句新增:"replicated_storage" = "true"创建具有自增列的表时,必须设置 'replicated_storage' = 'true',以确保所有副本具有相同的自增 ID。
数据导入系统参数enable_query_queue_loadtrue开启INSERT SELECT 导入队列,用于控制是否为导入任务启用查询队列。
BEstreaming_load_max_mb102400流式导入单个文件大小的上限。自 3.0 版本起,默认值由 10240 变为 102400。
BEstreaming_load_max_batch_size_mb102400流式导入json文件的最大值
BEflush_thread_num_per_store8每个盘的flush线程数,当用户盘比较少时可以设置较大,盘较多时设置较小,一般情况下 flush_thread_num_per_store * store_num < be_cpu_core_num / 2
olap_table_sink_send_interval_ms1会影响Broker Load的速度,但影响有限
BEnumber_tablet_writer_threads18用于 Stream Load 的线程数。自 v3.1.7 起变为动态参数
BEload_process_max_memory_limit_percent50单节点上所有的导入线程占据的内存上限比例,取 mem_limit * load_process_max_memory_limit_percent / 100 和 load_process_max_memory_limit_bytes 中较小的值,导入内存到达限制,会触发刷盘和反压逻辑。
BEload_process_max_memory_limit_bytes322122547200单节点上所有的导入线程占据的内存上限,取 mem_limit * load_process_max_memory_limit_percent / 100 和 load_process_max_memory_limit_bytes 中较小的值。如导入内存到达限制,则会触发刷盘和反压逻辑。
BEenable_new_load_on_memory_limit_exceededtrue默认true,开启该参数时,导入作业总内存达到阈值后,新增的导入作业会排入队列中
BEsend_channel_buffer_limit134217728默认值64MB,当导入的数据列较多、单行数据较大时,可以适当调大
broker_write_timeout_seconds300Broker写文件时flush操作的超时时间
FEstream_load_default_timeout_second86400Stream Load 的默认超时时间。
FEmax_running_txn_num_per_db1000StarRocks 集群每个数据库中正在运行的导入相关事务的最大个数,默认值为 1000。自 3.1 版本起,默认值由 100 变为 1000。当数据库中正在运行的导入相关事务超过最大个数限制时,后续的导入不会执行。如果是同步的导入作业请求,作业会被拒绝;如果是异步的导入作业请求,作业会在队列中等待。不建议调大该值,会增加系统负载。
高并发查询BEfragment_pool_thread_num_max8192最大查询线程数。
系统变量enable_query_queue_selecttrue默认值为false,在高并发场景下可以打开,启用查询队列(仅global级别)
系统变量query_timeout7200用于设置查询超时时间,单位为秒。该变量会作用于当前连接中所有的查询语句,以及 INSERT 语句。
session级别max_user_connections5000当前用户的最大连接数为 1000。SET PROPERTY FOR 'jack' 'max_user_connections' = '1000';
FEqe_max_connection20000FE 支持的最大连接数,包括所有用户发起的连接。
系统变量enable_query_cachetrue是否开启 Query Cache。取值范围:true 和 false。true 表示开启,false 表示关闭(默认值)。开启该功能后,只有当查询满足Query Cache 所述条件时,才会启用 Query Cache。

默认false,
系统变量cbo_enable_low_cardinality_optimizetrue是否开启低基数全局字典优化。开启后,查询 STRING 列时查询速度会有 3 倍左右提升
默认为true,但是可能会触发BE crash
实时写入Flinkpipeline.object-reusetrueflink 开启对象重用
Flinktable.exec.sink.upsert-materializenone由于分布式系统中的 shuffle 会造成 changelog 数据的乱序,所以 sink 接收到的数据可能在全局的 upsert 中乱序,所以要在 upsert sink 之前添加一个 upsert 物化算子。该算子接收上游 changelog 数据,并且给下游生成一个 upsert 视图。
默认情况下,在唯一 key 遇到分布式乱序时,该物化算子会被添加,也可以选择不物化(NONE),或者是强制物化(FORCE)。
在测试吞吐量时设置为NONE
Flinksink.buffer-flush.max-bytes300000000积攒在内存的数据大小,达到该阈值后数据通过 Stream Load 一次性导入 StarRocks。取值范围:[64MB, 10GB]。将此参数设置为较大的值可以提高导入性能,但可能会增加导入延迟。 该参数只在 sink.semantic 为at-least-once才会生效。
测试吞吐时可加大
Flinksink.buffer-flush.max-rows1000000积攒在内存的数据条数,达到该阈值后数据通过 Stream Load 一次性导入 StarRocks。取值范围:[64000, 5000000]。该参数只在 sink.version 为 V1,sink.semantic 为 at-least-once 才会生效。
测试吞吐时可加大
Flinksink.buffer-flush.interval-ms5000数据发送的间隔,用于控制数据写入 StarRocks 的延迟,取值范围:[1000, 3600000]。该参数只在 sink.semantic 为 at-least-once才会生效。
测试吞吐时可加大
基准测试系统变量enable_query_tablet_affinitytrue基准测试由于只查询一次,需要精确利用上缓存,这个参数设置为true,相当于每次查询都查询固定的节点副本,从而使用Page Cache提速