Sysbench对Mysql进行基准测试过程解析
Huny 人气:0前言
1.基准测试(benchmarking)是性能测试的一种类型,强调的是对一类测试对象的某些性能指标进行定量的、可复现、可对比的测试。
进一步来理解,基准测试是在某个时候通过基准测试建立一个已知的性能水平(称为基准线),当系统的软硬件环境发生变化之后再进行一次基准测试以确定那些变化对性能的影响,这也是基准测试最常见的用途。其他用途包括测定某种负载水平下的性能极限、管理系统或环境的变化、发现可能导致性能问题的条件等等。
2.基准测试的作用:
对于大多数Web应用而言,系统的瓶颈往往很容易发生在数据库端,原因很简单:Web应用中的其他因素,例如网络带宽、负载均衡节点、应用服务器(包括CPU、内存、硬盘灯、连接数等)、缓存,都很容易通过水平的扩展(俗称加机器)来实现性能的提高。而对于数据库如MySQL,由于数据一致性的要求,无法通过增加机器来分散向数据库写数据带来的压力;虽然可以通过前置缓存(Redis等)、读写分离、分库分表来减轻压力,但是与系统其它组件的水平扩展相比,受到了太多的限制。
而对数据库的基准测试的作用,就是分析在当前的配置下(包括硬件配置、OS、数据库设置等),数据库的性能表现,从而找出数据库的性能阈值,并根据实际系统的要求调整配置。除此之外,对数据库服务器进行基准测试,也通常用于观察对比数据库结构修改之前以及修改之后,其性能会受到什么样的影响。
3.基准测试与压力测试区别:
很多时候,基准测试和压力测试在实际使用的过程中,很容易被弄混淆。基准测试可以理解为针对系统的一种压力测试。但基准测试不关心业务逻辑,更加简单、直接、易于测试,数据可以由工具生成,不要求真实;而压力测试一般考虑业务逻辑(如购物车业务),要求真实的数据。
4.基准测试工具:
SysBench是一个模块化的、跨平台、多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况。它主要包括以下几种方式的测试:
1、cpu性能
2、磁盘io性能
3、调度程序性能
4、内存分配及传输速度
5、POSIX线程性能
6、数据库性能(OLTP基准测试)
目前sysbench主要支持 MySQL,pgsql,oracle 这3种数据库。
安装
yum -y install sysbench
sysbench --help ##检查安装是否成功
友情提示:安装出现依赖包缺少可以看这里
数据准备
准备
create database sysbench_test;
show databases; #检查数据库
quit #退出
2. 开始
find / -name oltp*.lua #查找sysbench自带的数据写入脚本的路径,后面执行命令需要用到
sysbench /usr/share/sysbench/oltp_read_write.lua --tables=5 --table_size=100 --mysql-user=root --mysql-password=xxx --mysql-host=192.168.0.103 --mysql-port=3306 --mysql-db=sysbench_test prepare
#/usr/share/sysbench/oltp_read_write.lua :上面查询到的sysbench自带读写脚本的路径
#--tables:指定生成表的数量,此处设置了5张表,表明生成5张测试表,读者可根据实际需要,调整此值。
#--table_size:指定生成表中生成的数据量,上述例子,表明每张表生成100条测试数据,实际可以根据需要调整引值,比如调整为:1000000,即代表生成一百万条测试数据。
#--mysql-db: 连接的测试数据库名称,此处使用上面创建的数据库进行测试。
#--mysql-user: 连接的数据库的用户名
#--mysql-password: 连接的数据库的密码
#--mysql-port: 连接的数据库开发的端口
执行提示错误
原因:
导入的数据超过数据库默认的值
解决:
需要到安装mysql的服务器上修改数据配置
vim /etc/my.cnf
修改max_allowed_packet的值,如果没有则在最后面添加一行
再次执行成功,mysql客服端检查一下数据
执行测试
sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-user=root --mysql-password=xxx --mysql-host=192.168.0.103 --mysql-port=3306 --mysql-db=sysbench_test --tables=5 --table_size=100 --threads=10 --time=30 --report-interval=3 run
#--threads:表示线程数
#--time:表示执行时间
#--report-interval:表示间隔多少秒输出测试信息
# run :表示运行,其他参数信息和上面一致就不在讲解了
上述命令,表明使用了10个并发线程数,执行时间为30秒,每3秒输出一次测试信息
其中,对于我们比较重要的信息包括:
- queries:查询总数及qps
- transactions:事务总数及tps
- Latency-95th percentile:前95%的请求的响应时间。
清理数据
测试完成后别忘了最后的收尾工作,大量的测试数据存在数据库还是有影响的.
sysbench /usr/share/sysbench/oltp_read_write.lua --tables=5 --table_size=100 --mysql-user=root --mysql-password=xxx --mysql-host=192.168.0.103 --mysql-port=3306 --mysql-db=sysbench_test cleanup
#这里的参数按之前插入数据的参数填写,确保全部清除干净
检查数据
加载全部内容