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 ...;
四、使用建议与排查思路
- 先诊断后调参 :修改参数前,建议先通过
EXPLAIN查看查询执行计划,判断性能瓶颈是否由资源限制导致,避免盲目调参。 - 调优后验证 :参数调整后,可通过
SHOW PROCESSLIST或查询 Profile 观察资源使用变化,评估调优效果。 - 适度调整:并行度和内存参数不要一次性设置过高,避免挤占集群整体资源,影响其他业务正常运行。
五、扩展资源控制参数速览
除上述两个核心变量外,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 |