_作者:编程迷思
地址:https://www.cnblogs.com/kisme…
什么是基准测试
数据库的基准测试是对数据库的性能指标进行定量的、可复现的、可比照的测试。基准测试与压力测试 基准测试能够了解为针对零碎的一种压力测试。但基准测试不关怀业务逻辑,更加简略、间接、易于测试,数据能够由工具生成,不要求实在;而压力测试个别思考业务逻辑 (如购物车业务),要求实在的数据。
基准测试的作用
对于少数 Web 利用,整个零碎的瓶颈在于数据库;起因很简略:Web 利用中的其余因素,例如网络带宽、负载平衡节点、应用服务器(包含 CPU、内存、硬盘灯、连接数等)、缓存,都很容易通过程度的扩大(俗称加机器)来实现性能的进步。而对于 MySQL,因为数据一致性的要求,无奈通过减少机器来扩散向数据库写数据带来的压力;尽管能够通过前置缓存(Redis 等)、读写拆散、分库分表来加重压力,然而与零碎其它组件的程度扩大相比,受到了太多的限度。
而对数据库的基准测试的作用,就是剖析在以后的配置下(包含硬件配置、OS、数据库设置等),数据库的性能体现,从而找出 MySQL 的性能阈值,并依据理论零碎的要求调整配置。
基准测试的指标
常见的数据库指标包含:
TPS/QPS:掂量吞吐量。响应工夫:包含均匀响应工夫、最小响应工夫、最大响应工夫、工夫百分比等,其中工夫百分比参考意义较大,如前 95% 的申请的最大响应工夫。。并发量:同时解决的查问申请的数量。
基准测试的分类
对 MySQL 的基准测试,有如下两种思路:
- 针对整个零碎的基准测试:通过 http 申请进行测试,如通过浏览器、APP 或 postman 等测试工具。该计划的长处是可能更好的针对整个零碎,测试后果更加精确;毛病是设计简单实现艰难。
- 只针对 MySQL 的基准测试:长处和毛病与针对整个零碎的测试恰好相反。
在针对 MySQL 进行基准测试时,个别应用专门的工具进行,例如 mysqlslap、sysbench 等。其中,sysbench 比 mysqlslap 更通用、更弱小,且更适宜 Innodb(因为模仿了许多 Innodb 的 IO 个性),上面介绍应用 sysbench 进行基准测试的办法。
sysbench 简介
sysbench 是跨平台的基准测试工具,反对多线程,反对多种数据库;次要包含以下几种测试:
1.cpu 性能 2. 磁盘 io 性能 3. 调度程序性能 4. 内存调配及传输速度 5.POSIX 线程性能 6. 数据库性能 (OLTP 基准测试)7. 本文次要介绍对数据库性能的测试。
sysbench 装置
本文应用的环境时 CentOS 6.5;在其余 Linux 零碎上的装置办法大同小异。MySQL 版本是 5.6。
1. 下载解压
wget https://github.com/akopytov/sysbench/archive/1.0.zip -O "sysbench-1.0.zip"unzip sysbench-1.0.zip
cd sysbench-1.0
2. 装置依赖
yum install automake libtool –y
3. 装置 装置之前,确保位于之前解压的 sysbench 目录中。./autogen.sh
./configure
export LD_LIBRARY_PATH=/usr/local/mysql/include
#这里换成机器中 mysql 门路下的 include
make
make install
4. 装置胜利
[root@test sysbench-1.0]# sysbench --version
sysbench 1.0.9
sysbench 语法
执行 sysbench –help,能够看到 sysbench 的具体应用办法。sysbench 的根本语法如下:
sysbench [options]... [testname] [command]
上面阐明理论应用中,罕用的参数和命令。
1.command command 是 sysbench 要执行的命令,包含 prepare、run 和 cleanup,顾名思义,prepare 是为测试提前准备数据,run 是执行正式的测试,cleanup 是在测试实现后对数据库进行清理。
2.testname testname 指定了要进行的测试,在老版本的 sysbench 中,能够通过 –test 参数指定测试的脚本;而在新版本中,–test 参数曾经申明为废除,能够不应用 –test,而是间接指定脚本。
例如,如下两种办法成果是一样的:
sysbench --test=./tests/include/oltp_legacy/oltp.lua
sysbench ./tests/include/oltp_legacy/oltp.lua
测试时应用的脚本为 lua 脚本,能够应用 sysbench 自带脚本,也能够本人开发。对于大多数利用,应用 sysbench 自带的脚本就足够了。不同版本的 sysbench 中,lua 脚本的地位可能不同,能够本人在 sysbench 门路下应用 find 命令搜寻 oltp.lua。P.S.:大多数数据服务都是 oltp 类型的,如果你不理解什么是 oltp,那么大概率你的数据服务就是 oltp 类型的。
3.options sysbench 的参数有很多,其中比拟罕用的包含:MySQL 连贯信息参数:
1.–mysql-host:MySQL 服务器主机名,默认 localhost;如果在本机上应用 localhost 报错,提醒无奈连贯 MySQL 服务器,改老本机的 IP 地址应该就能够了。2.–mysql-port:MySQL 服务器端口,默认 33063.–mysql-user:用户名 4.–mysql-password:明码
MySQL 执行参数:
1.–oltp-test-mode:执行模式,包含 simple、nontrx 和 complex,默认是 complex。simple 模式下只测试简略的查问;nontrx 不仅测试查问,还测试插入更新等,然而不应用事务;complex 模式下测试最全面,会测试增删改查,而且会应用事务。能够依据本人的须要抉择测试模式。2.–oltp-tables-count:测试的表数量,依据理论状况抉择 3.–oltp-table-size:测试的表的大小,依据理论状况抉择 4.–threads:客户端的并发连接数 5.–time:测试执行的工夫,单位是秒,该值不要太短,能够抉择 1206.–report-interval:生成报告的工夫距离,单位是秒,如 10
sysbench 应用举例
在执行 sysbench 时,应该留神:
1. 尽量不要在 MySQL 服务器运行的机器上进行测试,一方面可能无奈体现网络(哪怕是局域网)的影响,另一方面,sysbench 的运行(尤其是设置的并发数较高时)会影响 MySQL 服务器的体现。2. 能够逐渐减少客户端的并发连接数(–thread 参数),察看在连接数不同状况下,MySQL 服务器的体现;如别离设置为 10,20,50,100 等。3. 个别执行模式抉择 complex 即可,如果须要特地测试服务器只读性能,或不应用事务时的性能,能够抉择 simple 模式或 nontrx 模式。4. 如果间断进行屡次测试,留神确保之前测试的数据曾经被清理洁净。
上面是 sysbench 应用的一个例子:
1. 筹备数据
sysbench ./tests/include/oltp_legacy/oltp.lua --mysql-host=192.168.10.10 --mysql-port=3306 --mysql-user=root --mysql-password=123456 --oltp-test-mode=complex --oltp-tables-count=10 --oltp-table-size=100000 --threads=10 --time=120 --report-interval=10 prepare
其中,执行模式为 complex,应用了 10 个表,每个表有 10 万条数据,客户端的并发线程数为 10,执行工夫为 120 秒,每 10 秒生成一次报告。
2. 执行测试 将测试后果导出到文件中,便于后续剖析。
sysbench ./tests/include/oltp_legacy/oltp.lua --mysql-host=192.168.10.10 --mysql-port=3306 --mysql-user=root --mysql-password=123456 --oltp-test-mode=complex --oltp-tables-count=10 --oltp-table-size=100000 --threads=10 --time=120 --report-interval=10 run >> /home/test/mysysbench.log
3. 清理数据 执行完测试后,清理数据,否则前面的测试会受到影响。
sysbench ./tests/include/oltp_legacy/oltp.lua --mysql-host=192.168.10.10 --mysql-port=3306 --mysql-user=root --mysql-password=123456 cleanup
测试后果
测试完结后,查看输入文件,如下所示:
其中,对于咱们比拟重要的信息包含:queries:查问总数及 qps transactions:事务总数及 tps Latency-95th percentile:前 95% 的申请的最大响应工夫,本例中是 344 毫秒,这个提早十分大,是因为我用的 MySQL 服务器性能很差;在正式环境中这个数值是相对不能承受的。
倡议
上面是应用 sysbench 的一些倡议。
1. 在开始测试之前,应该首先明确:应采纳针对整个零碎的基准测试,还是针对 MySQL 的基准测试,还是二者都须要。2. 如果须要针对 MySQL 的基准测试,那么还须要明确精度方面的要求:是否须要应用生产环境的实在数据,还是应用工具生成也能够;前者施行起来更加繁琐。如果要应用实在数据,尽量应用全副数据,而不是局部数据。3. 基准测试要进行屡次才有意义。4. 测试时须要留神主从同步的状态。5. 测试必须模仿多线程的状况,单线程状况岂但无奈模仿实在的效率,也无奈模仿阻塞甚至死锁状况。
更多技术干货,可关注民工哥微信公众号