高质量解读《高性能mysql》——第2章MySQL基准测试
前言:
高效读书,一张逻辑图带你读懂、读薄书中重点。
深入学习MySQL系列,解读的目的是为了把书读薄,抽出重点进行梳理、理解、运用。因大量文字很容易让人觉得枯燥无味,为此博主花费一定精力和时间整理输出为逻辑思维图,以便大家学习和参考。
--------------------------------------------------------------------------------------
注:下面文字只是对逻辑思维图的”翻译“,节省时间,只看图即可。
目录
MySQL基准测试思维逻辑图
为什么需要基准测试
基准测试(benchmark)是MySQL新手和专家都需要掌握的一项技能)
什么叫基准测试
基准测试是针对系统设计的一种压力测试(就是 看看机器能扛住多大的吞吐量)
基准测试可以干成的事
- 观察系统在不同压力下的行为,评估系统的容量
- 模拟比当前系统更高的负载,以便找出系统可能遇到的扩展性瓶颈
- 测试硬件配置等
基准测试的压力与真实压力
- 真实压力是不可预期而且变化多端的,实际情景可能会更加复杂
- 重点:基准测试通常要求尽可能快地执行完成
结论
- 只能进行大概的测试,来确定系统大致的余量有多少
- 基准测试要尽量简单直接,结果之间容易相互比较,成本低且易于执行
基准测试的策略
两种主要的策略
针对整个系统的整体测试
- 测试整个应用系统(Web服务、组件、网络和数据存储),用户关心的是整体的性能
- MySQL并非总是应用的瓶颈
- 便于发现各部分之间的交互带来的影响
- 更能揭示应用的真实表现
单独测试MySQL
- 需要比较不同查询的性能
- 有针对性的具体测试
- 做快速的短期的基准测试,做快速的“周期循环”
测试何种指标
- 吞吐量
- 响应时间或者延迟
- 并发性
- 可扩展性
基准测试的方法
设计和规划基准测试
第一步提出问题并明确目标,接着决定是采用标准的基准测试,还是专用的测试
设计专用的基准测试一般需要一个迭代过程
- 获得生产数据集的快照
- 针对数据运行查询
- 在不同级别记录查询(比如同时查询http请求日志,MySQL的查询日志)
- 写测试规划,记录每一轮测试详细记录
基准测试应该运行多长时间
可以尝试让测试一直运行,持续观察直到确认系统已经稳定
获取系统性能和状态
建议一个目录,每次执行一轮测试创建单独的子目录,记录测试详情(性能指标:CPU使用率、磁盘I/O、网络流量统计、SHOW GLOBAL STATUS计数器)
获得准确的测试结果
- 选择哪种测试标准(I/O密集型、CPU密集型、还是内存密集型)
- 确认测试结果是否可重复
- 每次测试中,修改的参数应该尽量少
- 如果测试中出现异常结果,要查找根本原因
运行基准测试并分析结果
自动化基准测试
绘图的重要性
比如将性能指标按照时间顺序绘制
基准测试的工具
集成式测试工具
- ab
- http_load
- JMeter
单组件式测试工具
- mysqlslap
- sql-bench
- Super Smack
- Database Test Suite
- TPCC-MySQL
- sysbench
基准测试的案例
http_load
MySQL基准测试套件
sysbench
数据库测试套件中的dbt2 TPC-C测试
Percona的TPCC-MySQL测试工具
总结
基准测试是用来解决业务问题的一种实践行动
基准测试是一种很好的学习方法
- 学习如何将问题分解成可以通过基准测试来获得答案的方法(类似数学上根据文字题目推导出方程式)
- 先正确描述问题,选择合适的基准测试来解答问题,设置基准测试的持续时间和参数,运行测试,收集数据,分析结果数据
基本学习
- 至少要熟悉sysbench
- 学习使用oltp和fileio测试
- 文件系统和磁盘基准测试
制定一些原则
- 选择一些合适的测试工具并深入学习
- 可以建立一个脚本库,用于配置基准测试,收集输出结果、系统性能和状态信息,以及结果分析
- 使用一种熟练的绘图工具如gnuplot或者R
以上内容均为博主原创手码梳理。码字不易,但只要能提高,都是值得的。如果您觉得,这篇文章对您的基础知识学习、巩固、提高有帮助,欢迎点赞、分享、收藏,谢谢。 --天天water