大数据体系和 SQL
大数据体系和 SQL
大数据体系
批试分析,实时分析,交互分析都是 SQL 的应用场景。
SQL 的处理流程
SQL 是一种声明式语言,用户只描述做什么,没有告诉数据库怎么做
SQL 也是很多系统都支持的接口
🎈 SQL 的处理流程经过了四个组件,分别是 Parser、Analyzer、Optimizer、Executor
Parser:把 SQL 的输入编程 AST 的输出
Analyzer:AST 经过 Analyzer 处理,输出 Logical Plan 这种逻辑计划
Optimizer:Logical Plan 经过 Optimizer(优化器)处理,之后输出物理的执行计划 Physical Plan
Executor:Physical Plan 最后经过 Executor 处理,返回结果给用户
下面详细说一下四个组件
Parser
Parser 的输出是 AST(抽象语法树),要输出 AST 则要经过两个步骤:语法分析的词法分析
语法分析:拆分字符串,得到关键词,数值常量,字符串常量,运算符号等 token
词法分析:将 token 组成 AST node,最终得到 AST
Analyzer
Analyzer 可以:
检查并绑定 Database,Table,Column 等元信息
SQL 的合法性检查,比如 min/max/avg 都是输入的数值,不能是字符串等
将 AST 转成 Logical Plan 这种逻辑计划
Logical Plan:逻辑地描述 SQL 对应的分步骤计算操作
计算操作:算子(operator)
Optimizer
🎈 Optimizer 是查询优化,是一个重点
查询计划的目标:找到一个正确且执行代价最小的物理执行计划
查询优化器是数据库的大脑,最复杂的模块,很多相关问题都是 NP 的(有时无法取得最优解)
一般 SQL 越复杂 Join 的表越多,数据量越大,查询优化的意义就越大,因为不同执行方式的性能差别可以有成百上千倍
Executor
🎈 Executor 两种运行模式:
单机并行:cache,pipeline,SIMD
多级并行:一个 fragment 对应多个实例
🎈 Plan Fragment:执行计划子树:
目标:最小化网络数据传输
利用上数据的物理分布(数据亲和性)
增加 Sshuffle 算子
SQL 的处理主要包括解析(parse)、执行(execute)、提取(fetch)几个步骤。
SQL 的执行流程:
1、在打开客户端后,最初需要和 sql 服务器建立连接,账号认证和校验权限。
2、认证后,客户端发生查询 sql 脚本给服务器
3、服务器先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果。否则进入下一阶段。
4、服务器端进行 SQL 解析、预处理,再由优化器生成对应的执行计划。
5、MySQL 根据优化器生成的执行计划,再调用存储引擎的 API 来执行查询。
6、将结果返回给客户端。
查询优化器
常见的查询优化器
按照遍历树的顺序划分:
Top-down Optimizer:
从目标输出开始,由上往下遍历计划树,找到完整的最优执行计划
例子:Volcano/Cascade,SQLServer
Bottom-up Optimizer:
从零开始,由下往上遍历计划树,找到完整的最优执行计划
例子:System R,PostgreSQL,IBM DB2
根据优化方法划分:
Rule-based Optimizer(RBO)
根据关系代数等价语义,重写查询
基于启发式规则
会访问表的元信息(catalog),不会涉及具体的表数据(data)
Cost-base Optimizer(CBO)
使用一个模型估算执行计划的代价,选择代价最小的执行计划。
🎈 即 RBO 基于规则,CBO 基于代价
RBO
关系代数
运算符和等价代换
优化原则
优化 IO:读更少数据且更快
优化网络:传输的数据更少且更快
优化 CPU 和内存:处理数据更少且更快
优化方式
列裁剪
谓词下推
传递闭包
Runtime Filter
RBO 优点:实现简单,优化速度快;缺点是不保证得到最优的执行计划
CBO
🎈使用一个模型估算执行计划的代价,选择代价最小的执行计划。
执行计划的代价等于所有算子的执行代价之和
通过 RBO 得到可能的等价执行计划
🎈算子代价:CPU,内存等代价
和算子输入数据的统计信息有关
叶子算子 Scan:通过统计原始表数据得到
中间算子:根据一定的推导规则,从下层算子的统计信息推导得到
CBO 统计信息的收集方式
在 DDL 里指定需要收集的统计信息,数据库会在数据写入时收集或者更新统计信息
手动执行 explain analyze statement,触发数据库收集或者更新统计信息
动态采样
CBO 小结
CBO 使用代价模型和统计信息估算执行计划的代价
CBO 使用贪心或者动态规划算法寻找最优执行计划
在大数据场景下 CBO 对查询性能非常重要
版权声明: 本文为 InfoQ 作者【孤衫】的原创文章。
原文链接:【http://xie.infoq.cn/article/50ad309719da8c433b1b94649】。文章转载请联系作者。
评论