mysql 递归_「MySQL」 - SQL Cheat Sheet - 未完成

近几个月的心情真是安排的妥妥的,呈现W状。多的不说了,这里对SQL的测试进行简单梳理,制作一份SQL Cheat Sheet。

0x01、数据库基本架构

5b4fa7fcc998a07f49901d3d1102898a.png
  • Clinet层
  • Server层
    • 连接器
      • 网络连接建立、管理
        • 长连接导致的OOM的自动处理
      • 权限管理
    • 缓存
      • KV
    • 分析器
      • 词法分析
      • 语法分析
        • AST语法树
    • 优化器
      • 多表连接顺序
      • 索引选取
    • 执行器
      • MySQL调用存储引擎提供的接口
    • 其他
      • 内置函数
      • 存储过程
      • 触发器
      • 视图
  • 存储引擎层
    • 数据R/W

0x02、SQL词法分析

A、解析SQL步骤

  1. 词法分析:将SQL字符串拆分成包含关键词识别的字符段(Tokens)。
  2. 语法分析:利用自顶向下或自底向上的算法,将Tokens解析为AST(Abstract Syntax Trees)。
  3. 错误检测、恢复、提示推断:需要利用语法分析产生的AST。

B、词法分析

词法分析根据规则将SQL字符串切分为若干字符段,切分的规则与定义的Tokens有关。

SQL的Token分类(精简):

  • 注释
  • 关键字(SELECT、CREATE)
  • 操作符(+、-、>=)
  • 开闭合标志
  • 支持子句
  • 占位符(?)
  • 空格
  • 引号包裹的文本、数字、字段

词法分析阶段,只需识别关键词即可切分(正则),而关键词的辨认、语意处理、上下文相关都在语法分析阶段处理。

C、语法分析

语法分析分为自顶向下与自底向上,自顶向下一般采用递归下降方式处理,自底而上一般采用移进(shift)规约(reduce)方式处理。

0x03、数据库测试点 - 基本流程

  1. 连接数据库
    1. 网络连接
    2. 权限
    3. DB错误
  2. 创建数据库
  3. 创建表结构
  4. 执行SQL语句、存储过程、触发器
    1. 大小写敏感
    2. SQL保留字
    3. SQL语法错误
  5. 释放与数据库连接

0x04、数据库性能测试

A、可能会导致性能降低的原因

  1. 物理存储
  2. 逻辑设计
  3. 数据参数调整
  4. SQL语句优化

B、MySQL性能测试方法

1、测试工具:mysqlslap,mysqlslap是MySQL 5.1.4之后自带的benchmark基准测试工具,该工具可以模拟多个客户端同时并发的向服务器发出查询更新。

使用方法,https://my.oschina.net/moooofly/blog/152547。

2、测试流程:建立测试数据库database和待测试的表tables,根据table的结构,利用脚本生成一定数量的有效随机数据,通过mysqlslap对相应query语句进行测试,最后进行结果数据的分析。

3、关键语句:考虑到MySQL的实际应用情况,通过资源属性查询资源的操作为主要操作,且这类操作的耗时占总操作耗时的比例为最大,故这类操作的查询语句为关键语句,对整个数据库性能影响很大,可以通过测试这个关键语句得出的结果来评估整个数据库的性能。

0x05、sysbench

A、基准测试

数据库的基准测试是对数据库的性能指标进行定量的、可复现的、可对比的测试。基准测试可以理解为针对系统的一种压力测试。但基准测试不关心业务逻辑,更加简单、直接、易于测试,数据可以由工具生成,不要求真实;而压力测试一般考虑业务逻辑,要求真实的数据。

对数据库的基准测试的作用,就是分析在当前的配置下(包括硬件配置、OS、数据库设置等),数据库的性能表现,从而找出MySQL的性能阈值,并根据实际系统的要求调整配置。

针对MySQL进行基准测试时,一般使用专门的工具进行,例如mysqlslap、sysbench等。其中,sysbench比mysqlslap更通用、更强大,且更适合Innodb(模拟了许多Innodb的IO特性)。

B、sysbench

sysbench是跨平台的基准测试工具,支持多线程,支持多种数据库;主要包括以下几种测试:

  • cpu性能
  • 磁盘io性能
  • 调度程序性能
  • 内存分配及传输速度
  • POSIX线程性能
  • 数据库性能(OLTP基准测试)

STUB


参考:

作业部落 Cmd Markdown 编辑阅读器

https://www.slideshare.net/yejr/my-sql-20131020

https://juejin.im/entry/59e051ad6fb9a0450b6565ec

https://cloud.tencent.com/developer/article/1004894

https://github.com/dt-fe/weekly/blob/master/64.精读《手写 SQL 编译器 - 词法分析》.md

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值