使用Sysbench对MySQL进行压力测试
Posted WhCAT
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Sysbench对MySQL进行压力测试相关的知识,希望对你有一定的参考价值。
|前言
sysbench主要包括以下几种方式的测试:
1、cpu性能
2、磁盘io性能
3、调度程序性能
4、内存分配及传输速度
5、POSIX线程性能
6、数据库性能(OLTP基准测试)
我们这里用的是其数据库性能测试功能。
|压测目的
|压测指标
|操作步骤
|sysbench安装
curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bash
sudo yum -y install sysbench
注意:请让sysbench运行在一台单独的主机上,否则可能会导致测试结果不准确,并且sysbench和MySQL存在冲突的可能。
|sysbench用法
用法格式:
sysbench script [options]... [command]
- script:测试脚本;
- options:可选参数
- command:命令
script:
sysbench 通过脚本定义了若干常用的压测模型,以下简单列出几个常用的模型:
压测模型 | 描述 |
---|---|
bulk_inert.lua | 批量插入数据 |
insert.lua | 单值插入数据 |
delete.lua | 删除数据 |
oltp.lua | 混合读写测试,读写比例14:4 |
select.lua | 简单的主键查询 |
除此之外,用户还可以使用自己编写的lua脚本,或直接去修改官方提供的脚本,在这里我们使用的测试脚本是oltp.lua
。
options连接信息参数:
参数名称 | 参数说明 | 示例 |
---|---|---|
--mysql-host | MySQL服务器地址 | 192.168.1.10 |
--mysql-port | MySQL服务器端口号 | 3306 |
--mysql-user | 连接用户名 | root |
--mysql-password | 连接密码 | 123 |
options执行参数:
参数名称 | 参数说明 | 示例 |
---|---|---|
--oltp-test-mode | 执行模式 | complex |
--oltp-tables-count | 测试表的数量 | 10 |
--oltp-table-size | 单个测试表的记录数 | 100000 |
--threads | 并发线程数 | 10 |
--time | 测试时间(秒) | 300 |
--report-interval | 生成报告的时间间隔(秒) | 10 |
执行模式可选值:
- simple: 简单查询,SELECT c FROM sbtest WHERE id=N
- nontrx (non-transactional) :与simple相似,但是可以进行update/insert
等操作,所以如果做连续的对比压测,你可能需要重新cleanup,prepare。
- complex (advanced transactional) :事务模式。针对InnoDB引擎,sysbench在开始和结束事务之前加上begin和commit;针对MyISAM引擎,sysbench将会在开始和结束之间使用LOCK TABLES/UNLOCK TABLES语句。 一个事务里可以有多个语句,如点查询、范围查询、排序查询、更新、删除、插入等,并且为了不破坏测试表的数据,在该模式下一条记录删除后会在同一个事务里添加一条相同的记录。
在这里,我们选择事务模式。
command:
可选值 | 解释 |
---|---|
prepare | 准备测试数据 |
run | 执行测试 |
cleanup | 清除测试数据 |
|准备测试数据
第一步:在要测试的MySQL服务器上创建数据库"sbtest"
第二步:运行以下命令在10张表里共生成100W条测试数据:
sysbench /usr/share/sysbench/tests/include/oltp_legacy/oltp.lua --mysql-host=192.168.1.10 --mysql-port=3306 --mysql-user=root --mysql-password=123 --oltp-tables-count=10 --oltp-table-size=100000 prepare
测试脚本
/usr/share/sysbench/tests/include/oltp_legacy/oltp.lua
的存放路径在不同的平台或不同的Linux发行版上可能不同,请根据自己的实际情况变通。
|进行压力测试
运行以下命令:
sysbench /usr/share/sysbench/tests/include/oltp_legacy/oltp.lua --mysql-host=192.168.1.10 --mysql-port=3306 --mysql-user=root --mysql-password=123 --oltp-test-mode=complex --threads=10 --time=300 --report-interval=10 run
本例中开启了10个线程、测试时间300s、生成报告的间隔时间10s、测试模式为事务模式。
|测试结果分析
因为上面设置了生成报告的时间间隔是10s,所以可以看到每10s报告一次测试结果:
待跑完300s后,就可以看到一个汇总后的结果,我们所关心的QPS、TPS、响应时间也在里面:
TPS结果:这300s共执行了38498次事务,平均下来每秒处理的事务数为128(TPS为128)。
QPS结果:这300s共执行完成了770438次请求,平均下来每秒处理的请求数数为2567(QPS为2567)。
RT结果:最大响应时间为300ms,最小响应时间为32ms,平均响应时间为77ms,95%请求的响应时间大概是125ms。
ignored errors:共有29个错误被忽略,平均每秒0.1个。在本例中,客户端开了10个线程。可以在错误数没有明显提告的情况下,尝试加大并发线程数数,这样测出来的TPS和QPS理论上会更高,也能更好的反映数据库并发处理能力。
|清除数据
清除数据清的是数据库里的测试数据。当然了,你也可以选择不清除。清除数据的命令和准备数据的命令类似,可以直接把前面写的准备测试数据的那条命令最后的prepare换成cleanup
sysbench /usr/share/sysbench/tests/include/oltp_legacy/oltp.lua --mysql-host=192.168.1.10 --mysql-port=3306 --mysql-user=root --mysql-password=123 --oltp-tables-count=10 --oltp-table-size=100000 cleanup
非常感谢你能看到这里。如果你感觉这篇文章确实对你有所帮助,不妨点个在看,让更多人能够看到这篇文章。
以上是关于使用Sysbench对MySQL进行压力测试的主要内容,如果未能解决你的问题,请参考以下文章