Doris性能调优
一、架构与存储优化
- 存储模型选择
- Aggreagate聚合模型:对需要预聚合的场景(如PV/UV统计)使用AGGREGATE KEY,减少实时计算压力。
- Unique模型:需实时更新的业务表采用UNIQUE KEY,支持主键唯一性约束。
- Duplicate模型:日志类数据选择无主键模型,支持全字段快速写入。
- LSM-Tree优化
- 调整Compaction策略,平衡写入性能与查询效率:
-- 修改合并策略(默认V1)
SET compaction_policy = "size_based"; -- 按文件大小合并
- 控制Compaction频率,避免写放大:
ALTER TABLE orders SET ("compaction_min_size" = "104857600"); -- 100MB以下文件不合并
二、索引优化
- 智能索引配置
- 高频查询字段启用Sorted Compound Key Index(最多3列组合索引)
- 范围查询字段使用Z-Order Index,优化多维过滤效率
- 高基数列(如用户ID)添加Bloom Filter,减少无效IO
- 索引维护
- 定期分析索引命中率:
SHOW INDEX EFFECTIVENESS FROM orders;
- 删除冗余索引,避免写入性能下降
三、查询优化
- JOIN性能调优
- 数据分布策略:
-- 小表广播(默认25MB阈值)
SELECT /*+ BROADCAST(small_table) */ ...
-- 大表Shuffle(>1GB)
SELECT /*+ SHUFFLE_HASH(large_table) */ ...
- Runtime Filter:
SET runtime_filter_type = "IN,MIN_MAX"; -- 减少Shuffle数据量
- 向量化执行
- 启用向量化引擎提升复杂查询性能:
SET enable_vectorized_engine = true;
- 分区剪枝
- 按时间分区后自动过滤无效数据:
SELECT * FROM logs WHERE dt='20250422'; -- 仅扫描对应分区
四、资源与并行度控制
- 内存管理
- 调整查询内存上限防止OOM:
SET exec_mem_limit = 8G; -- 单查询最大内存
- 优化BE节点内存分配比例:
# be.conf
storage_page_cache_limit=30% -- 存储缓存占比
- 并行执行优化
- 根据集群规模调整并行度:
SET parallel_fragment_exec_instance_num = 16; -- 单节点并发数
五、数据导入优化
- 批量写入调优
- 调整Stream Load批次大小:
curl -X PUT -T data.csv http://fe_host:8030/api/orders/_stream_load?batch_size=102400
- 启用Broker Load压缩传输:
LOAD LABEL label1 (DATA INFILE("hdfs://path") INTO TABLE orders) WITH BROKER "broker1" ("compression" = "lz4");
六、高级监控
- 查询分析工具
- 查看执行计划详情:
EXPLAIN GRAPH SELECT ...
- 监控Compaction状态:
SHOW PROC "/compactions";
优化优先级建议:
- 优先解决数据分布问题(分区分桶不合理导致的热点)
- 次优处理内存相关参数(OOM和GC导致的性能波动)
- 最后优化执行引擎参数(向量化、并行度等)
本文来自博客园,作者:业余砖家,转载请注明原文链接:https://www.cnblogs.com/yeyuzhuanjia/p/18840262

浙公网安备 33010602011771号