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

0x01、数据库基本架构

  • 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

mysql 递归_「MySQL」 - SQL Cheat Sheet - 未完成相关推荐

  1. linux mysql软件_「Linux」 - 常用软件安装-MySql

    一.TIPS 1.5.6版本使用mysql_install_db安装:5.7版本中被废弃,使用--initialize,进行初始化安装 2.初始化时,使用--initialize-insecure生成 ...

  2. mysqlclient==1.3.7对应mysql版本_「MySQL」CentOs 7 下安装MySQL

    MySQL MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管 ...

  3. mysql pk uk_「fk」SQL中PK、UK、DF、CK、FK的意思 - seo实验室

    fk PK 主键 constraint primary key UK 唯一约束 DF 约束默认 constrint default for CK 检查约束 constraint check() FK ...

  4. mysql 日期_「5」学习MySQL日期与时间类型发现:要养成注重细节的习惯

    在前面的学习中我们提到过字段类型这个概念,本篇的主题就是来讲一种常用而相对复杂的类型:日期与时间. MySQL中表示日期与时间的数据类型有很多种,但主要的不外乎下面五种: 记住上面表中的"范 ...

  5. mysql 日期_「13」MySQL中与日期与时间相关的函数

    下面这张图片,是我们每个人拿起手机就应该看到的,这就是日期与时间! MySQL中如何通过各种函数来实现日期与时间的处理?这就是本文所要探索的问题! [1]获取当前日期的函数 [结论]返回值是以&quo ...

  6. 二级联动省市mysql数据库_「zxfy」jQuery+php+mysql,轻松实现ajax无刷新省市二级联动 - seo实验室...

    zxfy 用jQuery的ajax方法,结合PHP,轻松实现省市级的二级联动: 新建area.php $dbc=mysqli_connect("localhost","x ...

  7. mysql永远不用utf8_永远不要在 MySQL 中使用「utf8」

    题图:by apple from Instagram 本文出自极客邦「聊聊架构」公众号的编译.我自己当年也被这个问题坑过,当时并没有如此详细的分析文章.我觉得有责任再次分享一下,让更多人知道这个事情. ...

  8. 消除左递归实验代码_「leetcode」108. 构造二叉搜索树【递归】【迭代】详解!

    构造二叉搜索树,一不小心就平衡了 ❞ 108.将有序数组转换为二叉搜索树 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树 ...

  9. shell实行mysql语句_【Mysql】shell运行mysql的sql语句_MySQL

    bitsCN.com [Mysql]shell运行mysql的sql语句 shell本身是一种脚本语言,所以不能像java一样通过api去连接数据库.shell还是要借助mysql本身的一些运行脚本才 ...

最新文章

  1. 多个流,简短的读和写
  2. QT如何实现对于字符串数学公式计算
  3. Linux安装好php后找不到php.ini
  4. 将多张图整合到一张大图中,再用css定位技术
  5. 知识图谱应用实战案例100篇(一)-阿里巴巴超大规模知识图谱预训练实践:商品分类
  6. Linux的chattr与lsattr命令详解(重点-i参数,锁定文件,禁止修改文件)
  7. python中 if __name__ == ‘__main__‘
  8. sigmoid函数_深度学习中激活函数总结
  9. UnityShader - 模拟动态光照特效
  10. linux的vi详细命令
  11. 【激光雷达3D】【论文翻译】PointPillars: Fast Encoders for Object Detection from Point Clouds
  12. Linux如何在系统启动时自动加载模块 .
  13. 解决:网络风暴引起的无法ping通
  14. ROS-Navigation之map_server笔记及程序解析
  15. Spring——DI
  16. 清华大学计算机学院考研参考书目,2020清华大学计算机考研参考书目及复试线...
  17. 城市级智能网联示范区情况全扫描(2021版)
  18. Android自定义View实现三角到八角的属性分布图-雷达图(蜘蛛网图)
  19. 一键卸载,跟流氓软件说拜拜~
  20. 腾讯手游助手链接资源更新服务器失败怎么办,腾讯手游助手更新刺激战场提示网络出现异常更新失败怎么办?...

热门文章

  1. 学生命科学要学计算机吗,现在学生物学出路真的有那么不济吗?
  2. matlab工程计算及应用 课程名称,《 MATLAB 工程计算及应用》教学大纲课程名称MATLAB 工程计算及应用.pdf...
  3. 电梯tt服务器显示第二行啥意思,【大杂烩】〖其他〗奥的斯电梯服务调试器按键说明(TT)...
  4. 计算机应用技术一级考试成绩,《计算机应用基础》课程与等级考试成绩的关系...
  5. mysql 远程连接取消权限_MYSQL远程登录权限设置
  6. java基础分享_一、java基础教程
  7. bigdecimal判断等于0_vue2.0源码用到的工具函数,12个简易的复用函数,看看有多简单...
  8. ProtoBuff3.0.0在Ubuntu上安装
  9. PCM复用设备和PDH设备的区别介绍
  10. 单E1光端机分类及技术指标详解