1、OceanBase查询优化器工程实践议题大纲u 查询优化器简介u OceanBase查询优化器工程实践查询优化器简介执行计划80ms找到代价最小计划HJ统计信息50ms10msSCAN(R1)NLJSCAN(R2)优化器selectR1.a, R2.bfromR1, R2whereR1.c = R2.c100ms1s代价模型SCAN(R1)SCAN(R2)CPUIONET查询优化器面临的挑战海量计划空间精准的代价模型和统计信息高效的计划管理机制统计信息和代价模型l 静态模型: 比如buffer命中率,IO RT等l 采样误差,滞后选择率计算&中间结果估计CPUIONET代价模型统计信息l 单表
2、谓词选择率: 比较准确(动态采样,多列直方图等技术)l 多表连接谓词选择率: 基于均匀分布假设,错误率很高查询优化器面临的挑战精准的代价模型和统计信息海量计划空间高效的计划管理机制计划空间表个数5等价逻辑计划个数3210230415114688204980736201326592155692564482530星型查询星型查询等价逻辑计划个数l 物理算子实现 + 基于代价的改写 + 分布式优化l 如何高效的枚举执行计划?查询优化器面临的挑战精准的代价模型和统计信息海量计划空间高效的计划管理机制计划管理计划缓存计划演进plan cacheplanbaseline优化器select * from R
3、 whereR.a = 1 and R.b = 1是否参数化优化一次是否缓存缺点需要解决不同参数对应不同计划问题参数化计划过多select * from R whereR.a = ? and R.b = ?优化时间不可忽略议题大纲u 查询优化器简介u OceanBase查询优化器工程实践OceanBase优化器总体框架查询改写(基于规则+基于代价)计划缓存计划添加基表访问路径选择代价模型连接顺序和连接算法其它算子分配自适应计划匹配计划演进统计信息优化器执行反馈执行器执行器议题大纲u 查询优化器简介u OceanBase查询优化器工程实践 统计信息和代价模型计划空间计划管理基表访问路径选择l 如
4、何获取行数信息(选择率计算)l 如何评估一个索引的代价 统计信息(直方图) 扫描索引代价: 扫描行数,大部分场景是顺序扫描 动态采样 回表代价: 回表行数,随机扫描索引代价计算例子查询: select * from t1 where c2 200 and c2 800 and c3 200 and c2 800) = 0.1, Sel(c3 P2) P2): 把P1物理属性转化成P2物理属性代价P1:100msP2:150msTC(P1-P2) =20msHJHJ对P1结果按照P2结果分区方式进行重分区EX(HASH)R1EX(HASH)R1EX(Broadcast)R2R2议题大纲u 查询优
5、化器简介u OceanBase查询优化器工程实践统计信息和代价模型计划空间 计划管理参数化计划缓存参数化优化+缓存select * from R whereR.a = 1 and R.b = 1select * from R whereR.a = ? and R.b = ?plan cachel 为什么参数化?l 为什么缓存? 为每一个参数缓存一个计划是不切实际的 大部分查询一个计划能满足所有参数需求性能考虑是否命中计划性能百us级别几个ms级别参数化计划缓存带来的问题l 数据存在倾斜,不同参数需要缓存不同计划l 查询: 找出特定商户过去一年总销售额商户淘宝美团LV占比50%10%0.1主表扫
6、描索引扫描.蚂蚁商户域的账单场景自适应计划匹配SQL直方图自适应计划匹配plancache执行反馈执行引擎l 自适应计划匹配 只有必要才会缓存多个计划 通过渐进式的合并选择率空间来达到划分的目的计划演进l 计划演进: 对新生成计划进行验证,保证新计划不会造成性能回退 统计信息更新/SCHEMA变更/优化器参数变更/计划演进时机计划演进过程创建老计划老baseline替换planbaseline95%5%真实流量baseline不存在成功新计划新baselineSQLbaseline计划一样新计划执行演进失败baseline计划不一样放弃plan baselineplan cache小结l 查询优化器立足于自身架构和业务场景特点 基于LSM-TREE的存储引擎 Share-nothing的分布式架构 大规模的运维稳定性l OceanBase致力于打造OLTP和OLAP融合的查询优化器 立足于蚂蚁/阿里真实业务场景,完美承载业务需求 对标商业数据库,进一步打磨HTAP的优化器能力