一:Mysql基准测试
1、什么是基准测试
数据库的基准测试是对数据库的性能指标进行定量的、可复现的、可对比的测试。
基准测试与压力测试
基准测试可以理解为针对系统的一种压力测试。但基准测试不关心业务逻辑,更加简单、直接、易于测试,数据可以由工具生成,不要求真实;而压力测试一般考虑业务逻辑(如购物车业务),要求真实的数据。
2、基准测试的作用
对于多数Web应用,整个系统的瓶颈在于数据库;原因很简单:Web应用中的其他因素,例如网络带宽、负载均衡节点、应用服务器(包括CPU、内存、硬盘灯、连接数等)、缓存,都很容易通过水平的扩展(俗称加机器)来实现性能的提高。而对于MySQL,由于数据一致性的要求,无法通过增加机器来分散向数据库写数据带来的压力;虽然可以通过前置缓存(Redis等)、读写分离、分库分表来减轻压力,但是与系统其它组件的水平扩展相比,受到了太多的限制。
而对数据库的基准测试的作用,就是分析在当前的配置下(包括硬件配置、OS、数据库设置等),数据库的性能表现,从而找出MySQL的性能阈值,并根据实际系统的要求调整配置。
3、基准测试的指标
常见的数据库指标包括:
TPS/QPS:衡量吞吐量。(单位时间内处理的事务数TPS;单位时间内锁处理的查询量QPS)
响应时间:包括平均响应时间、最小响应时间、最大响应时间、时间百分比等,其中时间百分比参考意义较大,如前95%的请求的最大响应时间。。
并发量:同时处理的查询请求的数量。
4、基准测试的分类
对MySQL的基准测试,有如下两种思路:
(1)针对整个系统的基准测试:通过http请求进行测试,如通过浏览器、APP或postman等测试工具。该方案的优点是能够更好的针对整个系统,测试结果更加准确;缺点是设计复杂实现困难。
(2)只针对MySQL的基准测试:优点和缺点与针对整个系统的测试恰好相反。
在针对MySQL进行基准测试时,一般使用专门的工具进行,例如mysqlslap、sysbench等。其中,sysbench比mysqlslap更通用、更强大,且更适合Innodb(因为模拟了许多Innodb的IO特性),下面介绍使用sysbench进行基准测试的方法。
二、Mysql基准测试工具
2.1Mysqlslap
Mysql自带的基准测试工具,岁mysql一起安装
~常用参数说明
~1 --auto-generate-sql 有系统自动生成sql脚本进行测试
~2 --auto-generate-sql-autoincrement 在生成的表中增加自增ID
~3 --auto-genetate-load-type 指定测试中使用的查询类型(增删改查)
~4 --auto-generate-sql-write-number 指定初始化数据时生成的数据量
~5 --concurrency 指定并发线程数量
~6 --engine 指定测试表的存储引擎,可以用逗号分隔多个存储引擎
~7 --no-drop 指定不清理测试数据
~8 --iterations 指定测试运行的次数
~9 --number-of-queries 指定每一个线程执行的查询数量
~10 --create-schema 指定了用于执行测试的数据库的名字
~11 --query 指定自定义sql脚本
~12 --only-print 并不运行测试脚本,二十八生成的脚本打印出来
-- 检查系统中是否安装了mysqlslslap工具
通过命令:mysqlslap -help
2.2 Mysql基准测试工具sysbench
安装:地址==> https://github.com/akopytov/sysbench/archive/0.5.zip