- Author(s):
- Last updated: 2022-10-17
- Discussion at: 飞书
- Project at: https://github.com/winoros/wetune/tree/httpserver https://github.com/winoros/tidb/tree/connect-wetune
该项目旨在在 TiDB 进入优化阶段之前,对 SQL 进行一定的改写来提升执行性能。
SQL 优化一直是一个比较复杂的工作,需要考虑很多因素来进行优化。近年来,在学术会议上也有越来越多的论文对优化器进行基于机器学习的改造。本项目尝试将一个基于机器学习+规则的,非侵入内核的开源项目,对 TiDB 的 SQL 处理进行改造。
与大多数直接对优化器进行学习改造的论文相比,本次项目仅仅是在优化器之前接入一个前端,整体对数据库的侵入性小,影响程度更可以观测,相对学习改造之后完全黑盒的优化器来说,本项目更具备实际应用的可能性。
同时本项目规约之后的输出是一条条等价改写规则,也具备一定的手动控制能力,可以做一些比修改优化器更快速的手段。同时规则的表达能力比现有的 Hint 系统更强,一定程度上也可以作为现有 Hint 的一个超集。当然由于输出的规则更加通用,所以并无法代替诸如 Use index 的 Hint。不过当要加的大量 Hint 可以进行规约的时候,这个规则系统便可能对 Hint 进行精简。
另一方面,由于这个改写前端是可以独立于 TiDB 的,所以可以根据需求进行更加灵活的改造,不比和 TiDB 的产品生命周期绑定,具备很大的灵活性。
我们使用今年 SIGMOD 2022 的论文 WeTune: Automatic Discovery and Verification of Query Rewrite Rules 的开源实现 https://ipads.se.sjtu.edu.cn:1312/opensource/wetune 对 TiDB 进行改造。
当前 TiDB 对 SQL 处理流程为 Client -> (SQL text) -> Parser -> (AST) -> Optimizer -> (LogicalPlan, PhysicalPlan) -> Executor
。本项目在进入 Parser 之前 fork wetune 的处理逻辑,对 SQL 进行一定的改写,将改写后的 SQL 重新投入 整体的 SQL 优化流程。
Client -> (SQL text) -> Auto transformaer -> (New SQL text) -> Parser -> (AST) -> Optimizer -> (LogicalPlan, PhysicalPlan) -> Executor
.
无。