Doris性能调优

一、‌架构与存储优化

  1. 存储模型选择
    • Aggreagate聚合模型‌:对需要预聚合的场景(如PV/UV统计)使用AGGREGATE KEY,减少实时计算压力。
    • Unique模型‌:需实时更新的业务表采用UNIQUE KEY,支持主键唯一性约束。
    • Duplicate模型‌:日志类数据选择无主键模型,支持全字段快速写入。
  2. LSM-Tree优化
    • 调整Compaction策略,平衡写入性能与查询效率:

    -- 修改合并策略(默认V1)

    SET compaction_policy = "size_based";  -- 按文件大小合并

    • 控制Compaction频率,避免写放大:

    ALTER TABLE orders SET ("compaction_min_size" = "104857600");  -- 100MB以下文件不合并

 

二、‌索引优化

  1. 智能索引配置
    • 高频查询字段启用Sorted Compound Key Index(最多3列组合索引)
    • 范围查询字段使用Z-Order Index,优化多维过滤效率
    • 高基数列(如用户ID)添加Bloom Filter,减少无效IO
  2. 索引维护
    • 定期分析索引命中率:

      SHOW INDEX EFFECTIVENESS FROM orders;

    • 删除冗余索引,避免写入性能下降

 

三、‌查询优化

  1. JOIN性能调优
    • 数据分布策略‌:

      -- 小表广播(默认25MB阈值)

      SELECT /*+ BROADCAST(small_table) */ ...

      -- 大表Shuffle(>1GB)

      SELECT /*+ SHUFFLE_HASH(large_table) */ ...

    • Runtime Filter‌:

      SET runtime_filter_type = "IN,MIN_MAX";  -- 减少Shuffle数据量

  1. 向量化执行
    • 启用向量化引擎提升复杂查询性能:

      SET enable_vectorized_engine = true;

  1. 分区剪枝
    • 按时间分区后自动过滤无效数据:

      SELECT * FROM logs WHERE dt='20250422';  -- 仅扫描对应分区

 

四、‌资源与并行度控制

  1. 内存管理
    • 调整查询内存上限防止OOM:

      SET exec_mem_limit = 8G;  -- 单查询最大内存

    • 优化BE节点内存分配比例:

      # be.conf

      storage_page_cache_limit=30%  -- 存储缓存占比

  1. 并行执行优化
    • 根据集群规模调整并行度:

    SET parallel_fragment_exec_instance_num = 16;  -- 单节点并发数

 

五、‌数据导入优化

  1. 批量写入调优
    • 调整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");

 

六、‌高级监控

  1. 查询分析工具
    • 查看执行计划详情:

      EXPLAIN GRAPH SELECT ...

    • 监控Compaction状态:

      SHOW PROC "/compactions";

 

优化优先级建议‌:

  1. 优先解决数据分布问题(分区分桶不合理导致的热点)
  2. 次优处理内存相关参数(OOM和GC导致的性能波动)
  3. 最后优化执行引擎参数(向量化、并行度等)

 

posted @ 2025-04-22 11:02  业余砖家  阅读(601)  评论(0)    收藏  举报