高手云集,群英荟萃。
2022年3月19日 CSDN 数据库沙龙上,众多技术专家汇集在数据库线上 Meetup 直播现场,来自 OceanBase 技术专家田逸飞(花名:义博)为大家精彩讲述了 OceanBase SQL 的一生。
本次分享从一条 SQL 被数据库接收开始,一直到执行结束,讲述了数据库中的整体执行流程,以及了解 OceanBase 如何让同一类 SQL 共享执行计划,通过这条SQL的一生,帮助大家更好的了解和掌握 SQL 执行流程和计划缓存两大模块。
一、SQL 执行流程
1.SQL 执行流程介绍
从图中我们可以看到,当用户从 SQL 发送到 OBServer 后,会先由 OBServer 对其进行快速参数化,参数化后的 SQL 进入 Plan Cache 尝试命中计划缓存。当找到一个可以使用的计划,则直接将计划交由 SQL 的执行引擎去执行,并将执行完成后的结果返回给用户;如果没有找到可以使用的计划,则会重新为此 SQL 生成计划,完整地执行 SQL 的Parser、Resolver、Transformer、Optimizer、Code Generator 解析流程,然后生成一个可用的物理执行计划,并交由执行引擎执行,同时此计划会被加入到计划缓存,以便后续的 SQL 重新使用,详见下图。
2.查询改写
如下图所示,流程中的 Parser 主要负责语法词法的解析,它会将用户输入的 SQL 基于 lax 和 yacc 生成一个 Parse Node Tree,如下图右侧所示,它将用户的 SQL 拆成了一个树状结构,同时做了一些语法解析。
3.语义分析
Resolver 负责对 Parse Node Tree 做语义的分析,主要包括语句的解析、中缀表达式的生成、表达式的类型推导等,并最终将其转化成 OceanBase 在代码中更易于操作的数据结构
4.查询改写
Transformer 会在保证 SQL 执行结果相同并且正确的情况下对 SQL 做等价变换。目前在 OceanBase 中存在两类改写。
- 基于