sysbench磁mysql压力测试_使用Sysbench对MySQL进行压力测试

|前言

sysbench是

一个模块化、跨平台、多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况。sysbench

目前支持对MySQL/Oracle/PostgreSQL数据库进行基准测试。除了sysbench外,

可以对数据库进行基准测试的工具还有很多,比如MySQL自带的性能测试工具

mysqlslap

Super Smack、Jmeter

等,之所以选择sysbench是因为sysbench不仅功能丰富还适合对数据库做长时间高并发测试(一般为了反映数据库全天的负载情况,至少要连续测试24小时)。

sysbench主要包括以下几种方式的测试:

1、cpu性能

2、磁盘io性能

3、调度程序性能

4、内存分配及传输速度

5、POSIX线程性能

6、数据库性能(OLTP基准测试)

我们这里用的是其数据库性能测试功能。

|压测目的

【1】让开发者或运维人员对当前所用数据库的性能有一定的了解,根据自己的业务场景估算出服务器容量,必要时可进行扩容。

【2】为参数调优前后做一个参考。

|压测指标

以下这几个指标足够反映出数据库服务器的性能情况:

【1】QPS:每秒钟处理完的请求的次数

【2】TPS:每秒钟处理完的事务的次数

【3】RT:响应时间,一次请求所需要的平均处理时间

【4】并发量:系统能同时处理的请求数

|操作步骤

【1】下载并安装sysbench

【2】使用sysbench准备测试数据(prepare)

【3】执行压测(run)

【4】分析测试结果

【5】清除测试数据-非必需(cleanup)

|sysbench安装

以centos为例,其他系统请参考sysbench官方说明文档,项目地址:https://github.com/akopytov/sysbench

curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bashsudo 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报告一次测试结果:

9f3f956dfc0b306dd24988d44d4a249d.png

待跑完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

非常感谢你能看到这里。如果你感觉这篇文章确实对你有所帮助,不妨点个在看,让更多人能够看到这篇文章。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值