Doris 优化器重构与性能提升
01 重塑:Nereids 新一代优化器
- 问题:现有 Doris 优化器存在规则抽象不足、缺乏 CBO 框架、树遍历限制等缺陷,导致规则控制困难、统计信息推导能力弱、无法处理循环依赖等复杂场景。
- 解决方案:引入 Nereids 优化器,采用统一的视角重新理解优化规则,并实现以下突破:
- 规则抽象:提供更灵活的规则控制,降低调优成本,并支持查看规则优化后的执行计划。
- CBO 框架:建立统计信息收集框架,增强代价模型推导能力,实现更智能的 CBO。
- 树遍历优化:支持多轮遍历,解决循环依赖问题,并允许修改底层节点。
- 成果:Nereids 在 SSB、TPCH 500G/1T 测试中超越人工改写 SQL,用户 POC 测评性能显著提升。
02 优化的本质
- SQL 的本质:描述性语言,通过优化实现高效执行。
- SQL 的旅程:从用户输入到最终执行计划的过程。
- 优化的定义:通过特定策略提升查询性能。
- 优化举例:
- 尽早降低数据规模:如中美贸易详情(TPC-H q7)通过过滤减少数据量。
- Join reorder:通过动态规划(DP)优化 Join 顺序。
- Nereids 优化方法:结合 Cascading 和 DPhyper 算法。
03 性能瓶颈突破
- 两次重要突破:
- rewrite 重构:节约 MemoCopyIn/CopyOut,对复杂查询性能提升两个数量级。
- CostAndEnforce 优化:进一步优化代价模型和执行引擎。
04 挑战
- 公平与效率:
- Bushy:适用于表数量较少(如少于 5)的场景。
- Cascading:适用于表数量较多但误差可接受的场景。
- 颠覆者 Runtime Filter:
- 通过实时过滤技术优化特定查询,如查找“华为”品牌商品订单。
- 假设数据均匀分布且字段相关性低,误差可控。
社区参与
- 加入社区:
- 订阅开发者邮件组:dev@doris.apache.org。
- 参与双周开发者会议:https://meeting.tencent.com/dm/6iQBgkIhn5LO。
- 查阅 Doris Improvement Proposals (DSIP):https://cwiki.apache.org/confluence/display/DORIS/Doris+Improvement+Proposals。
- 关注资源:
- SelectDB 微信公众号:获取最新活动、技术解析、社区动态。
- SelectDB 官网:www.selectdb.com。
- Apache Doris GitHub:https://github.com/apache/doris。
- Apache Doris 官网:https://doris.apache.org/。