【Poster】基于DSL的查询重写热加载技术

基于DSL的查询重写热加载技术

作者:余翔、刘永存、李勋
{yuxiang44, liuyongcun, lixun44}@huawei.com

摘要

查询改写是优化器解决烂SQL重要手段,新的改写规则开发、验证周期长,内核集成开发适配复杂度高,缺少高度模块化的统一规则集成方案。新改写引擎集成DSL规则引擎,支持规则集的符号化表示,改写规则可基于DSL语言做原子化抽象,实现新规则集插件化集成,动态加载方案,打造免编译,跨领域,自枚举,自验证的重写引擎。是业界首个热加载、低成本开发的查询改写引擎,实现SQL调优新范式,烂SQL优化从版本级变为在线

引言

查询改写的目的是将客户人工写的SQL1,改写成等价但是更易优化的SQL2,比如将难以优化的连接转换为子查询,甚至消除客户查询逻辑中的冗余计算。查询改写的丰富能够大大提高优化器的适应性,降低客户SQL的质量要求,是查询优化逻辑优化的重要一环。但是在真实场景部署中中,我们时常会遇到下面三难问题。

Q1 . 难穷尽: 由于SQL语言的灵活性,改写规则是难以穷尽的,不同的数据库往往存在不同的改写优化集合,不同的客户在迁移至高斯数据库时,时常会遇到部分客户SQL由于改写规则缺失难以优化的情况。

Q2 . 难开发:SQL的语言是清晰的, 其改写逻辑往往是直观的,但是在内核代码中对于数据库内存结构的逻辑改写相对复杂,提高了改写复杂度,产生改写错误,甚至导致结果出现错误。

Q3 . 难验证:查询改写是个逻辑上的优化,需要证明他的逻辑等价性,往往这种改写逻辑等价需要相关的专家花较久的时间去证明。如何快速证明改写等价性,避免因为开发人员的场景识别缺失,导致实际实现的改写规则逻辑不等价。甚至能够批量发现改写规则,实现规则快速补充是一个重要问题。

系统架构

① 规则挖掘器

  • 配合上交wetune能力自动化挖掘器,实现规则自动枚举,自动验证,改写规则的发现由手动变为自动。

② 规则DSL

  • 抽象查询重写规则,将SQL抽象为单个语法的规则表达,加速改写规则的发现和使用。

③ 规则热生效

  • 热加载卸载改写规则,使用DSL语法描述改写规则,通过对应接口完成规则解析,实时加载到规则引擎的缓存中,轻量实现改写规则的增加删除。

④ 规则管理引擎

  • 解析DSL改写语法,编译语义<原始模板,目标模板,约束,动作>四元组。对查询树实现快速匹配和快速改写。实现DSL规则的在线改写生效。

规则自动挖掘

  • 上交团队合作,将改写规则由场景识别、人工验证,转为自动发现、机器推理。从Wetune 1.0 出发持续挖掘各类SQL的更优改写规则,补充高斯数据库内核改写规则集合,持续枚举规则共挖掘100+有效改写规则。
    • 规则枚举器:负责从已有语法树进行规则搜索,在限定范围内持续枚举可能的改写规则。
    • 规则验证器:以规则枚举器的输出为输入,使用形式化验证推理改写规则是否等价。

规则在线添加

  • 支持全新的规则DSL语言:

    • 语言能力上:由<原始模板,目标模板,约束,动作>关键四元组组成,实现大多数场景的语义改写能力覆盖。
    • 应用能力上:实现免编译的热加载。通过在线解析DSL语言,实现业务场景的慢SQL在线优化。
  • 当发现客户侧存在当前内核没有办法改写的烂SQL时,可以通过专家分析出应有的SQL改写规则,写出对应的规则DSL,在线添加至数据库优化器引擎,实现性能的在线优化。

未来工作

  • 用户改写意图的规则自动抽取