| 类型 | 模块 | 参数 | 值 | 备注 |
|---|---|---|---|---|
| 公共参数 | BE | storage_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 |
| BE | datacache_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/; | ||
| BE | disable_storage_page_cache | false | 启动操作系统缓存,多次查询性能提升明显 | |
| 系统参数 | query_mem_limit | xxx | 如果查询结果很大,可以适当调大该值,但需要根据系统内存调整 | |
| BE | storage_page_cache_limit | xxx | PageCache 的容量,可写为容量大小,也可以写为 PageCache 占系统内存的比例,例如,20%。该参数仅在 disable_storage_page_cache 为 false 时生效。 | |
| FE | ignore_unknown_log_id | true | 升级后如果碰到问题需要回滚,请在 fe.conf 文件中增加 ignore_unknown_log_id=true。这是因为新版本的元数据日志新增了类型,如果不加这个参数,则无法回滚。 | |
| BE | datacache_disk_size | 128849018880 | 主要用于存算分离,单个磁盘缓存数据量的上限,可设为比例上限(如 80%)或物理上限(如 2T, 500G 等)。举例:在 datacache_disk_path 中配置了 2 个磁盘,并设置 datacache_disk_size 参数值为 21474836480,即 20 GB,那么最多可缓存 40 GB 的磁盘数据。默认值为 0,即仅使用内存作为缓存介质,不使用磁盘 | |
| BE | query_cache_capacity | 4G | 指定 Query Cache 的大小。默认为 512 MB。最小不低于 4 MB。如果当前的 BE 内存容量无法满足您期望的 Query Cache 大小,可以增加 BE 的内存容量,然后再设置合理的 Query Cache 大小。每个 BE 都有自己私有的 Query Cache 存储空间,BE 只 Populate 或 Probe 自己本地的 Query Cache 存储空间。 | |
| BE | tablet_max_versions | 2000 | 每个 Tablet 上允许的最大版本数。如果超过该值,新的写入请求会失败。 | |
| FE | enable_collect_query_detail_info | true | 是否收集查询的 Profile 信息。设置为 true 时,系统会收集查询的 Profile。设置为 false 时,系统不会收集查询的 profile。 | |
| BE/FE | JAVA_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/FE | JAVA_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_load | true | 开启INSERT SELECT 导入队列,用于控制是否为导入任务启用查询队列。 |
| BE | streaming_load_max_mb | 102400 | 流式导入单个文件大小的上限。自 3.0 版本起,默认值由 10240 变为 102400。 | |
| BE | streaming_load_max_batch_size_mb | 102400 | 流式导入json文件的最大值 | |
| BE | flush_thread_num_per_store | 8 | 每个盘的flush线程数,当用户盘比较少时可以设置较大,盘较多时设置较小,一般情况下 flush_thread_num_per_store * store_num < be_cpu_core_num / 2 | |
| olap_table_sink_send_interval_ms | 1 | 会影响Broker Load的速度,但影响有限 | ||
| BE | number_tablet_writer_threads | 18 | 用于 Stream Load 的线程数。自 v3.1.7 起变为动态参数 | |
| BE | load_process_max_memory_limit_percent | 50 | 单节点上所有的导入线程占据的内存上限比例,取 mem_limit * load_process_max_memory_limit_percent / 100 和 load_process_max_memory_limit_bytes 中较小的值,导入内存到达限制,会触发刷盘和反压逻辑。 | |
| BE | load_process_max_memory_limit_bytes | 322122547200 | 单节点上所有的导入线程占据的内存上限,取 mem_limit * load_process_max_memory_limit_percent / 100 和 load_process_max_memory_limit_bytes 中较小的值。如导入内存到达限制,则会触发刷盘和反压逻辑。 | |
| BE | enable_new_load_on_memory_limit_exceeded | true | 默认true,开启该参数时,导入作业总内存达到阈值后,新增的导入作业会排入队列中 | |
| BE | send_channel_buffer_limit | 134217728 | 默认值64MB,当导入的数据列较多、单行数据较大时,可以适当调大 | |
| broker_write_timeout_seconds | 300 | Broker写文件时flush操作的超时时间 | ||
| FE | stream_load_default_timeout_second | 86400 | Stream Load 的默认超时时间。 | |
| FE | max_running_txn_num_per_db | 1000 | StarRocks 集群每个数据库中正在运行的导入相关事务的最大个数,默认值为 1000。自 3.1 版本起,默认值由 100 变为 1000。当数据库中正在运行的导入相关事务超过最大个数限制时,后续的导入不会执行。如果是同步的导入作业请求,作业会被拒绝;如果是异步的导入作业请求,作业会在队列中等待。不建议调大该值,会增加系统负载。 | |
| 高并发查询 | BE | fragment_pool_thread_num_max | 8192 | 最大查询线程数。 |
| 系统变量 | enable_query_queue_select | true | 默认值为false,在高并发场景下可以打开,启用查询队列(仅global级别) | |
| 系统变量 | query_timeout | 7200 | 用于设置查询超时时间,单位为秒。该变量会作用于当前连接中所有的查询语句,以及 INSERT 语句。 | |
| session级别 | max_user_connections | 5000 | 当前用户的最大连接数为 1000。SET PROPERTY FOR 'jack' 'max_user_connections' = '1000'; | |
| FE | qe_max_connection | 20000 | FE 支持的最大连接数,包括所有用户发起的连接。 | |
| 系统变量 | enable_query_cache | true | 是否开启 Query Cache。取值范围:true 和 false。true 表示开启,false 表示关闭(默认值)。开启该功能后,只有当查询满足Query Cache 所述条件时,才会启用 Query Cache。 默认false, | |
| 系统变量 | cbo_enable_low_cardinality_optimize | true | 是否开启低基数全局字典优化。开启后,查询 STRING 列时查询速度会有 3 倍左右提升 默认为true,但是可能会触发BE crash | |
| 实时写入 | Flink | pipeline.object-reuse | true | flink 开启对象重用 |
| Flink | table.exec.sink.upsert-materialize | none | 由于分布式系统中的 shuffle 会造成 changelog 数据的乱序,所以 sink 接收到的数据可能在全局的 upsert 中乱序,所以要在 upsert sink 之前添加一个 upsert 物化算子。该算子接收上游 changelog 数据,并且给下游生成一个 upsert 视图。 默认情况下,在唯一 key 遇到分布式乱序时,该物化算子会被添加,也可以选择不物化(NONE),或者是强制物化(FORCE)。 在测试吞吐量时设置为NONE | |
| Flink | sink.buffer-flush.max-bytes | 300000000 | 积攒在内存的数据大小,达到该阈值后数据通过 Stream Load 一次性导入 StarRocks。取值范围:[64MB, 10GB]。将此参数设置为较大的值可以提高导入性能,但可能会增加导入延迟。 该参数只在 sink.semantic 为at-least-once才会生效。 测试吞吐时可加大 | |
| Flink | sink.buffer-flush.max-rows | 1000000 | 积攒在内存的数据条数,达到该阈值后数据通过 Stream Load 一次性导入 StarRocks。取值范围:[64000, 5000000]。该参数只在 sink.version 为 V1,sink.semantic 为 at-least-once 才会生效。 测试吞吐时可加大 | |
| Flink | sink.buffer-flush.interval-ms | 5000 | 数据发送的间隔,用于控制数据写入 StarRocks 的延迟,取值范围:[1000, 3600000]。该参数只在 sink.semantic 为 at-least-once才会生效。 测试吞吐时可加大 | |
| 基准测试 | 系统变量 | enable_query_tablet_affinity | true | 基准测试由于只查询一次,需要精确利用上缓存,这个参数设置为true,相当于每次查询都查询固定的节点副本,从而使用Page Cache提速 |