doris学习6:参数调优

Doris 执行资源配置查看与调优:SHOW VARIABLES 实战指南

一、配置查看命令

通过 SHOW VARIABLES 可以精确或模糊查询 SQL 执行内存、并行线程等相关系统变量,获取当前生效值与系统默认值。

1. 精确查询核心变量

复制代码
-- 查看单条 SQL 执行内存上限
SHOW VARIABLES LIKE 'exec_mem_limit';

-- 查看查询并行实例线程数
SHOW VARIABLES LIKE 'parallel_fragment_exec_instance_num';

2. 全量查询系统变量

复制代码
-- 查看所有系统变量(输出内容较多,可结合过滤条件使用)
SHOW VARIABLES;

3. 返回结果字段说明

字段 含义说明
Value 当前会话的实际生效值
Default_Value 系统出厂默认值
Changed 参数是否被修改过:0 表示未修改,1 表示已修改

二、核心参数解读

查看doris中的变量:

-- 查看修改了默认参数情况

复制代码
SELECT
    VARIABLE_NAME,
    VARIABLE_VALUE,
    DEFAULT_VALUE
FROM information_schema.SESSION_VARIABLES
WHERE VARIABLE_VALUE <> DEFAULT_VALUE
ORDER BY VARIABLE_NAME;

这两个变量是查询性能调优中最基础、最常用的资源限制项:

  • exec_mem_limit:单条 SQL 查询在单个 BE 节点上的执行内存上限(单位:字节),用于管控查询内存占用,避免内存溢出。
  • parallel_fragment_exec_instance_num:单个查询在单个 BE 节点上的 Fragment 并行执行实例数,决定查询的并行度;数值越高并行能力越强,同时消耗的 CPU 资源也越多。

三、参数修改的三种方式

根据生效范围和使用场景,分为会话级、全局级、查询级三种修改方式。

1. 会话级修改(仅当前连接生效)

仅对当前数据库连接会话生效,断开连接后配置自动失效,适合临时测试与调试场景。

复制代码
-- 将当前会话执行内存上限设置为 8GB
SET exec_mem_limit = 8589934592;

-- 将当前会话并行实例数设置为 16
SET parallel_fragment_exec_instance_num = 16;

2. 全局级修改(所有新会话生效)

对修改完成后新建的所有会话生效,需要 ADMIN 权限,适合集群级统一调优。

复制代码
-- 将全局执行内存上限设置为 8GB(需 ADMIN 权限)
SET GLOBAL exec_mem_limit = 8589934592;

-- 将全局并行实例数设置为 16(需 ADMIN 权限)
SET GLOBAL parallel_fragment_exec_instance_num = 16;

⚠️ 注意事项:

  • 全局修改不影响已存在的会话,仅对之后新建立的连接生效;
  • 全局配置在集群重启后会恢复默认值,如需永久生效,需修改集群配置文件。

3. 查询级修改(仅单条 SQL 生效)

通过 SET_VAR 优化器提示为单条查询临时指定参数,不影响其他查询和会话,灵活度最高,适合针对特定大查询单独调优。

复制代码
-- 为当前查询设置 4GB 内存和 4 个并行实例
SELECT /*+ SET_VAR(exec_mem_limit=4294967296, parallel_fragment_exec_instance_num=4) */
    *
FROM your_table
WHERE ...;

四、使用建议与排查思路

  1. 先诊断后调参 :修改参数前,建议先通过 EXPLAIN 查看查询执行计划,判断性能瓶颈是否由资源限制导致,避免盲目调参。
  2. 调优后验证 :参数调整后,可通过 SHOW PROCESSLIST 或查询 Profile 观察资源使用变化,评估调优效果。
  3. 适度调整:并行度和内存参数不要一次性设置过高,避免挤占集群整体资源,影响其他业务正常运行。

五、扩展资源控制参数速览

除上述两个核心变量外,Doris 还有多个常用的资源管控参数,可配合进行全面的性能调优:

参数名 作用说明
query_timeout 查询超时时间(单位:秒),超过该时长未执行完成的查询会被自动终止
max_execution_time 单条 SQL 的最大执行时长,用于限制长查询占用资源
max_memory_usage BE 节点整体内存使用率上限,超过阈值后会拒绝新的查询请求
streaming_preaggregation_mode 流式预聚合模式开关,用于权衡聚合查询的内存占用与执行性能

六、修改的参数

参数名 默认值 当前值 简要说明 & 风险
parallel_exchange_instance_num -1 100 Exchange 算子并行实例数,-1 自动适配 CPU;硬编码 100 会线程暴涨,CPU 极易打满。🔴高危,建议恢复‑1
lower_case_table_names 1 0 表名大小写敏感;0 代表敏感,SQL 表名大小写不一致会报找不到表。🟡中风险,fe.conf 参数,不能 set global 修改
query_timeout 1800 900 SQL 执行超时时间 (秒),缩短至 15min;长 ETL、大报表会被强制 kill。🟢按需配置
runtime_bloom_filter_min_size 2048 1048576 触发布隆过滤器最小行数;调大后百万行以下 Join 不再生成布隆过滤,小表 Join 性能下降。🟡中风险,建议恢复 2048
auto_analyze_start_time 20:00:00 00:00:00 自动统计信息任务开始时间;改为凌晨 0 点,凌晨业务负载高会争抢资源。🟢按需配置
nereids_timeout_second 300 30 Nereids 优化器超时秒数;缩短到 30s,复杂多表大 SQL 优化阶段容易超时失败报错。🔴高危,建议恢复 300
wait_timeout 3600 28800 会话空闲超时 (秒);空闲连接存活拉长至 8 小时,有连接数堆积风险。🟢按需配置
net_read_timeout 60 600 网络读超时,放大到 600s;适合大结果集导出,僵死连接占用资源。🟢按需配置
net_write_timeout 60 600 网络写超时,放大到 600s;适合大结果集导出,僵死连接占用资源。🟢按需配置
external_agg_partition_bits 8 5 聚合中间结果分片 bit;数值变小分片变少,单分片数据变大,更容易触发 OOM。🟡中风险,建议恢复 8
sql_mode PIPES_AS_CONCAT "" 清空 SQL 模式;` ` 从字符串拼接变为逻辑或,返回 0/1,产生静默脏数据。🔴高危,务必恢复 PIPES_AS_CONCAT
deprecated_enable_materialized_view_union_rewrite false true 废弃参数,开启物化视图 union 改写,该逻辑已逐步废弃。🟡建议关闭 false
enable_get_row_count_from_file_list false true Hive 外表 count (*) 走元数据 / 文件大小估算,不走真实扫描;计数存在估算偏差,会误导 CBO 基数。🟡外表统计场景谨慎开启
enable_jdbc_cast_predicate_push_down false true JDBC 外表开启 cast 谓词下推;有 JDBC 外表获得查询优化收益,无外表无影响。🟢建议保留 true
enable_server_side_prepared_statement false true 开启服务端预编译语句;高并发场景消耗 FE 内存。🟢按需配置
enable_strict_consistency_dml false true DML 严格一致性;牺牲写入性能,保障多副本一致性。🟢按需配置
enable_audit_plugin true false 关闭 SQL 审计;无法查询审计日志、排查慢 SQL 与操作记录;高 QPS 集群为规避压力才关闭。🟡建议开启 true,配置审计 TTL,不直接关闭
enable_file_cache true false 关闭 BE 文件缓存;仅存算分离外表生效,冷查询直接读远端存储,性能下降;仅一次性 ETL、机械盘环境适合关闭。🟡建议开启 true
相关推荐
盟道科技1 小时前
小程序电商订单超时自动取消的三种实现方案:定时扫描、Redis 过期监听、延迟消息对比与生产落地
数据库·redis·小程序
剑锋所指,所向披靡!1 小时前
MySQL存储引擎
数据库·mysql
reasonsummer2 小时前
【办公类-146-05】20260901《一分园、二分园四大教育》(优化版:标题excle+复制AI文字+Python占位符录入)
开发语言·数据库·c#
2301_800954992 小时前
关系型数据库与非关系型数据库详解
数据库·nosql
崖边看雾2 小时前
MySQL——SQL 经典练习题:学生选课成绩查询(附详细注释)
大数据·数据库·sql·mysql
众壹新能源科技2 小时前
经营口径与运维口径不一致时,发电量报表怎么对账
运维·数据库·人工智能
jyOverQ2 小时前
MySQL 索引为什么能加快查询?B+Tree 到底是什么?
数据库·mysql
天天进步20152 小时前
Pixelle-Video 源码解析 #17:TTS 语音生成:Edge-TTS、Index-TTS 如何接入?
前端·数据库
鸽芷咕2 小时前
异构数据同步,凭什么敢说数据不丢?——拆解金仓KFS的全周期一致性校验
数据库