写点什么

大数据体系和 SQL

作者:孤衫
  • 2022 年 9 月 16 日
    安徽
  • 本文字数:1582 字

    阅读完需:约 5 分钟

大数据体系和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 对查询性能非常重要

发布于: 2022 年 09 月 16 日阅读数: 27
用户头像

孤衫

关注

还未添加个人签名 2022.08.02 加入

还未添加个人简介

评论

发布
暂无评论
大数据体系和SQL_大数据_孤衫_InfoQ写作社区