近几个月的心情真是安排的妥妥的,呈现W状。多的不说了,这里对SQL的测试进行简单梳理,制作一份SQL Cheat Sheet。
0x01、数据库基本架构
- Clinet层
- Server层
- 连接器
- 网络连接建立、管理
- 长连接导致的OOM的自动处理
- 权限管理
- 网络连接建立、管理
- 缓存
- KV
- 分析器
- 词法分析
- 语法分析
- AST语法树
- 优化器
- 多表连接顺序
- 索引选取
- 执行器
- MySQL调用存储引擎提供的接口
- 其他
- 内置函数
- 存储过程
- 触发器
- 视图
- 连接器
- 存储引擎层
- 数据R/W
0x02、SQL词法分析
A、解析SQL步骤
- 词法分析:将SQL字符串拆分成包含关键词识别的字符段(Tokens)。
- 语法分析:利用自顶向下或自底向上的算法,将Tokens解析为AST(Abstract Syntax Trees)。
- 错误检测、恢复、提示推断:需要利用语法分析产生的AST。
B、词法分析
词法分析根据规则将SQL字符串切分为若干字符段,切分的规则与定义的Tokens有关。
SQL的Token分类(精简):
- 注释
- 关键字(SELECT、CREATE)
- 操作符(+、-、>=)
- 开闭合标志
- 支持子句
- 占位符(?)
- 空格
- 引号包裹的文本、数字、字段
词法分析阶段,只需识别关键词即可切分(正则),而关键词的辨认、语意处理、上下文相关都在语法分析阶段处理。
C、语法分析
语法分析分为自顶向下与自底向上,自顶向下一般采用递归下降方式处理,自底而上一般采用移进(shift)规约(reduce)方式处理。
0x03、数据库测试点 - 基本流程
- 连接数据库
- 网络连接
- 权限
- DB错误
- 创建数据库
- 创建表结构
- 执行SQL语句、存储过程、触发器
- 大小写敏感
- SQL保留字
- SQL语法错误
- 释放与数据库连接
0x04、数据库性能测试
A、可能会导致性能降低的原因
- 物理存储
- 逻辑设计
- 数据参数调整
- 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