硬核解读,WeTune 是如何提升数据库查询重写性能?
近日,上海交通大学软件学院副院长王肇国和高斯实验室 GaussDB 数据库优化器专家 Ethan 联手开展了一场以《智能优化揭秘——GaussDB 数据库查询重写的自动挖掘与生成》为主题的技术对谈,深入探讨了 WeTune 2.0 的重写规则与 GaussDB 的合作落地。直播过程包含对 WeTune 2.0 的项目背景、WeTune 改写规则的自动发掘方式及实现、WeTune 2.0 版本优势、在 GaussDB 中的应用与技术转化、未来前景等内容的解析与分享,一起倾听他们产教融合背后的故事吧。以下是本访谈的文字记录。
WeTune 产品的项目背景
查询改写是数据库 SQL 优化过程中非常重要的部分,在语义不变的情况下,它可以把一条普通的或者性能不好的 SQL 语句优化成一条性能更好的 SQL 语句,实现查询效率的提升。改写规则作为查询改写中最关键的一个组件,想要在数据库里面添加改写规则,往往依赖于数据库专家经验的积累。如今,SQL 语句的生成对象不再受限于程序员,外部框架和大模型也能够自动生成,随着生成源的增加,原来的 SQL 改写规则不再适用。
由上海交通大学软件学院副院长王肇国团队开发出的 WeTune 刚好能解决这一问题,其核心思想就是自动发掘某些场景下的改写规则。于是,华为云数据库 GaussDB 团队与王肇国教授团队深度合作,成功完成 WeTune 2.0 在 GaussDB 产品上的落地。
WeTune 改写规则的自动发掘方式
自动挖掘的前提是暴力枚举,枚举之后检验语义是否正确,通过等价性验证去把最后一道关,所以,WeTune 的等价性验证能力决定了它能够枚举哪些规则。下面是 WeTune 的改写规则的自动发掘方式:
方式一,尝试暴力枚举所有在语法上合法的改写规则;
方式二,用形式化验证的方式去验证枚举的规则是否正确(输入、输出的 SQL 是否在语义上等价);
方式三,借鉴数据库 cost estimation 技术检验改写规则是否有效,SQL 优化性能是否更好。在实际运用中,以上改写规则的三种自动发掘方式也面临着一些现实层面的挑战。
暴力枚举虽然空间大,但开销也大,导致很多算力浪费。不过,上海交通大学软件学院副院长王肇国团队通过开发的一种只枚举小规则的技术,用小规则去推大规则,解决算力浪费的问题。
等价性验证。改写规则等价性验证,本质上就是 SQL 等价性验证,把不可判定问题的验证转换成可满足性等价、可判定问题的验证。另外,SQL 等价性本身是一个关系型代数,把它转换成线性代数的求解。通过这两个维度解决了现有的 SQL 等价性验证问题,使得改写规则的枚举能力和范围大大提升。目前 WeTune 2.0 支持 SQL:1999 所有语法的验证。
除了借鉴数据库 cost estimation 技术来检验 SQL 优化性能是否更好以外,还会创建数据库实例,将改写规则在数据库实例上运行,以保证 SQL 优化效果最佳。
有了这三方面的解决方案之后,2022 年,上海交通大学软件学院副院长王肇国团队对 WeTune 1.0 版本进行了一个性能测试。他们从 GitHub 上通过对起始时间、受欢迎程度等维度进行筛选排序,找了涵盖电商、论坛等不同应用场景的 20 个开源应用,并在这些应用上运行程序,共收集了大概 8500 多条 SQL 语句。结果显示,WeTune 1.0 优化的 SQL 语句大概 674 条,而其他商业数据库只能优化 427 条。相较而言,WeTune 1.0 优化效果大幅领先。
WeTune 改写规则的自动挖掘实现
WeTune 2.0 在 SQL 等价性验证、枚举的能力和范围、规则的表达上都进行了精心设计,对 GaussDB 使用体验有极大提升。
第一,WeTune 有验证规则的能力。对于开发流程来讲,验证规则是很重要的一步。
第二,WeTune 有自动发现规则的能力。重写规则依赖人工、偏场景化会导致发现规则比较缓慢。WeTune 可以帮助做优化,提高发现规则的效率。
第三,WeTune 有自动枚举的能力。等价验证加上自动枚举,自动挖掘一次能够发现成千上万条规则,相当于把查询重写整个模块开发流程做了一个加速。对于一个商业的数据库来讲, WeTune 自动挖掘可以减少开发人员冗余的规则添加,提高开发效率,降低人力成本。
第四,WeTune 定义新的查询重写语言。WeTune 应用在 GaussDB 数据库里,进行查询重写规则扩充的时候,其实定义了一种新的查询重写的语言。以前要写很多行的代码,才能给一套规则注入到引擎里面。现在不用写代码,只需要两三行的语言描述,通过规则验证后,直接放在数据库引擎里面,完成一个规则的实现。对开发者来说,体验非常好,对验证流程和开发流程帮助极大。
WeTune 2.0 版本优势
相比 WeTune 1.0 版本,WeTune 2.0 版本有几个比较大的优势:
第一,增强的 WeTune 枚举能力,包括枚举的速度和枚举更多的复杂规则;
第二,增强的 WeTune 验证能力,可以支持更多的 SQL 特性;
第三,可以让用户可读、可加载、甚至可以直接使用手写。
对比现有基于代码的查询引擎,WeTune 2.0 不需要代码、不需要编译、不需要去发布版本,客户自己可以写改写规则,写完之后,通过 GaussDB 提早准备的接口,直接放到数据库里面就可以即时生效。GaussDB 可以为用户提前预留好很多重写规则,后续如发现重写规则不够用,可自行增加,非常方便。
第四,改写规则可在客户端实现部署。WeTune 目前主要部署在云端,后面改写规则也可以部署在客户端,进行自动加载,实现不同用户间互不干扰。
WeTune 2.0 在华为云 GaussDB 的落地
WeTune 和现有数据库应用落地过程中,不同的架构会面临不同挑战。WeTune 2.0 在华为云 GaussDB 的落地,从技术角度来讲,GaussDB 数据库是 System-R 架构,它的重写规则是耦合在代码里面,增加或卸载一个规则需要改写查询引擎。把 WeTune 应用在 System-R 架构上面涉及到理论、技术、工程层面的一些问题。
不过,上海交通大学和华为的积极交流和深入探讨,也为彼此提供了不同的视角。在数据库开发过程中,改写规则非常依赖人工经验。随着客户场景越来越多,很多规则已经超出了现有的承载能力。从产品开发流程层面上讲,想要在 GaussDB 里面添加一个新的重写规则,论证重写规则是否等价是非常困难的。但是有了 WeTune 以后,开发者只要按照形式化语言去描述重写规则,然后 WeTune 拿去做验证,证明该规则在约束下是等价的,就可以放心地将该重写规则添加到 GaussDB 中,节约验证时间,对 GaussDB 的开发等流程非常有帮助。
WeTune 从框架上去解决了这两个重写规则是否等价的问题,这是 WeTune 非常突出的贡献点。对于客户来说,在使用 GaussDB 进行 SQL 优化时,只管放心用,优化交给 GaussDB;对于开发者来说,只需要关心 SQL 语义,性能交给 GaussDB。
GaussDB 引入 WeTune2.0 以后,自然会产生非常多的规则,帮助用户优化 SQL 的同时,也引入了另外一个成本,即会产生了 SQL 优化代价。
如何解决引入大量规则之后,产生的性能问题?
从客户角度来讲,很多业务其实是相对比较固定的,而且上线之前也提前会做系统测试。若系统里面 SQL 优化度很高,那么就不必改写规则和暴力枚举,这样就可以降低优化成本。
在实际环境中,大家希望数据库有成千上万条的改写规则可以给用户去用,可以生成改写的 SQL 语句。但是,改写规则非常多的时候,会导致改写和规则匹配的时间非常长,导致资源的极大浪费,也会影响用户体验。那如何在性能上做加速呢?
目前来讲,主要通过两方面来去解决:
一方面是从通用的匹配算法入手。当改写规则非常多的时候,匹配算法能够帮助性能有数量级的提升;
另一方面,从应用的场景或从 SQL 产生的源头来进行分类。不同应用场景下、不同业务目的、不同的框架需要的改写规则不一样,WeTune 2.0 可以对于不同场景和需求来去做定制化的规则探索。
WeTune 在数据库产业的价值及未来前景
WeTune 是多个技术合起来形成了一个规则挖掘。从学术角度来讲,SQL 等价性验证可以往数据库测试这个方向再迈一步。
在数据库测试过程中,对于 SQL 的优化引擎,可以使用差分测试。差分测试是一种很经典的数据库测试方式,验证重写规则可以使用,验证 SQL 优化引擎过程中也适用。WeTune 等价性验证器可以去枚举语义等价但形式完全不同的两条 SQL,这样可以确保在测试对比过程中,程序运行是不一样的路径,可以更高效或覆盖面更广地完成数据库引擎的测试任务。
WeTune 不仅减轻了数据库开发者或者 DBA 的负担,目前在教育领域里有一定的应用,WeTune 等价性验证帮助国内外很多高校助教批改学生的数据库作业,减轻数据库教育工作者的工作压力。
华为与高校的深度合作将持续推进,融合双方的技术优势和科研力量,共同探索数据库领域的前沿技术,培养更多高水平的数据库人才。未来,华为和上海交通大学研究团队将携手,共同突破数据库查询重写技术的瓶颈,通过持续的创新和优化,进一步提升 GaussDB 的查询性能和效率。我们期待更多的技术合作和探索,推动数据库技术向智能化、自动化方向发展,为广大企业和用户带来更多价值。
版权声明: 本文为 InfoQ 作者【华为云开发者联盟】的原创文章。
原文链接:【http://xie.infoq.cn/article/550bcef721d914c10a9517526】。文章转载请联系作者。
评论