TiDB SQL Engine Team:纯手工打磨前沿的优化器和执行引擎|PingCAP 招聘季

百家 作者:PingCAP 2020-03-24 21:29:54

“SQL at SCALE”(出自 PingCAP 官网是我们对 TiDB 的一个精简概括,而我们 TiDB SQL Engine Team 正是负责这 3 个单词中的 “SQL” 部分,其重要性可见一斑。SQL 在数据库中的大致处理流程可以简短概括为查询优化和执行,这期间涉及到 SQL Parser、优化器、统计信息和执行引擎等模块,他们就是 TiDB SQL Engine Team 目前所负责的模块。接下来我会用简短的篇幅向大家介绍 SQL Engine 的背景知识,以及我们在做的事情,面临的挑战等。


关于查询优化


优化器是 SQL 引擎的大脑,负责查询优化。查询优化的主要工作概括起来很简单:搜索可行的执行计划,从中挑一个最好的。但要做好这两件事却是整个分布式数据库中最难的地方。

1979 年 Selinger 发布了 “Access Path Selection in a Relational Database Management System [1]”,正式拉开了 Cost Based Optimization 的帷幕,这篇论文也被视为 CBO 优化器的圣经。在这之后陆续出现了 Starburst [2](1988 年),Volcano Optimizer Generator [3](1993 年)和 Cascades Framework [4](1995 年) 等,每年数据库三大顶会中也能看到不少查询优化相关的论文,整个优化器领域可谓是蓬勃发展。但即使如此,优化器也仍然有很多问题未能得到很好的解决,比如:

  1. Guy Lohman 2014 年在 “Is Query Optimization a “Solved” Problem? [5]” 中详细讲述的 SQL 算子结果集估算的难题。简单来说,要估算某个表需要扫多少行数据比较容易,但是要再估算更上层的 SQL 算子,比如 Join 或者 Join 之后再 Group By 的结果集有多大,这个就很难了。可以想象的是,估算误差会随着层数的增加而被放大,这个放大有时候是数量级的。此外还会出现负负得正的情况:明明估算错了,但是执行计划却是对的,纠正估算误差后,执行计划反而不对了

    关注公众号:拾黑(shiheibook)了解更多

    [广告]赞助链接:

    四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
    让资讯触达的更精准有趣:https://www.0xu.cn/

公众号 关注网络尖刀微信公众号
随时掌握互联网精彩
赞助链接