如何理解MySQL基准测试和sysbench工具

62次阅读
没有评论

共计 4563 个字符,预计需要花费 12 分钟才能阅读完成。

如何理解 MySQL 基准测试和 sysbench 工具,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

前言

作为一名后台开发,对数据库进行基准测试,以掌握数据库的性能情况是非常必要的。丸趣 TV 小编介绍了 MySQL 基准测试的基本概念,以及使用 sysbench 对 MySQL 进行基准测试的详细方法。

一、基准测试简介

1、什么是基准测试

数据库的基准测试是对数据库的性能指标进行定量的、可复现的、可对比的测试。

基准测试与压力测试

基准测试可以理解为针对系统的一种压力测试。但基准测试不关心业务逻辑,更加简单、直接、易于测试,数据可以由工具生成,不要求真实; 而压力测试一般考虑业务逻辑(如购物车业务),要求真实的数据。

2、基准测试的作用

对于多数 Web 应用,整个系统的瓶颈在于数据库; 原因很简单:Web 应用中的其他因素,例如网络带宽、负载均衡节点、应用服务器 (包括 CPU、内存、硬盘灯、连接数等)、缓存,都很容易通过水平的扩展(俗称加机器) 来实现性能的提高。而对于 MySQL,由于数据一致性的要求,无法通过增加机器来分散向数据库写数据带来的压力; 虽然可以通过前置缓存(Redis 等)、读写分离、分库分表来减轻压力,但是与系统其它组件的水平扩展相比,受到了太多的限制。

而对数据库的基准测试的作用,就是分析在当前的配置下(包括硬件配置、OS、数据库设置等),数据库的性能表现,从而找出 MySQL 的性能阈值,并根据实际系统的要求调整配置。

3、基准测试的指标

常见的数据库指标包括:

TPS/QPS:衡量吞吐量。

响应时间:包括平均响应时间、最小响应时间、*** 响应时间、时间百分比等,其中时间百分比参考意义较大,如前 95% 的请求的 *** 响应时间。。

并发量:同时处理的查询请求的数量。

4、基准测试的分类

对 MySQL 的基准测试,有如下两种思路:

(1)针对整个系统的基准测试:通过 http 请求进行测试,如通过浏览器、APP 或 postman 等测试工具。该方案的优点是能够更好的针对整个系统,测试结果更加准确; 缺点是设计复杂实现困难。

(2)只针对 MySQL 的基准测试:优点和缺点与针对整个系统的测试恰好相反。

在针对 MySQL 进行基准测试时,一般使用专门的工具进行,例如 mysqlslap、sysbench 等。其中,sysbench 比 mysqlslap 更通用、更强大,且更适合 Innodb(因为模拟了许多 Innodb 的 IO 特性),下面介绍使用 sysbench 进行基准测试的方法。

二、sysbench

1、sysbench 简介

sysbench 是跨平台的基准测试工具,支持多线程,支持多种数据库; 主要包括以下几种测试:

cpu 性能

磁盘 io 性能

调度程序性能

内存分配及传输速度

POSIX 线程性能

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

本文主要介绍对数据库性能的测试。

2、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  ndash;y

(3)安装

安装之前,确保位于之前解压的 sysbench 目录中。

./autogen.sh ./configure export LD_LIBRARY_PATH=/usr/local/mysql/include # 这里换成机器中 mysql 路径下的 include make make install

(4)安装成功

[root a href= http://www.jobbole.com/members/q1531454480 @test /a  sysbench-1.0]# sysbench --version sysbench 1.0.9

3、sysbench 语法

执行 sysbench ndash;help,可以看到 sysbench 的详细使用方法。

sysbench 的基本语法如下:

sysbench [options] hellip; [testname] [command]

下面说明实际使用中,常用的参数和命令。

(1)command

command 是 sysbench 要执行的命令,包括 prepare、run 和 cleanup,顾名思义,prepare 是为测试提前准备数据,run 是执行正式的测试,cleanup 是在测试完成后对数据库进行清理。

(2)testname

testname 指定了要进行的测试,在老版本的 sysbench 中,可以通过 ndash;test 参数指定测试的脚本; 而在新版本中,ndash;test 参数已经声明为废弃,可以不使用 ndash;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 连接信息参数

ndash;mysql-host:MySQL 服务器主机名,默认 localhost; 如果在本机上使用 localhost 报错,提示无法连接 MySQL 服务器,改成本机的 IP 地址应该就可以了。

ndash;mysql-port:MySQL 服务器端口,默认 3306

ndash;mysql-user:用户名

ndash;mysql-password:密码

MySQL 执行参数

ndash;oltp-test-mode:执行模式,包括 simple、nontrx 和 complex,默认是 complex。simple 模式下只测试简单的查询;nontrx 不仅测试查询,还测试插入更新等,但是不使用事务;complex 模式下测试最全面,会测试增删改查,而且会使用事务。可以根据自己的需要选择测试模式。

ndash;oltp-tables-count:测试的表数量,根据实际情况选择

ndash;oltp-table-size:测试的表的大小,根据实际情况选择

ndash;threads:客户端的并发连接数

ndash;time:测试执行的时间,单位是秒,该值不要太短,可以选择 120

ndash;report-interval:生成报告的时间间隔,单位是秒,如 10

4、sysbench 使用举例

在执行 sysbench 时,应该注意:

(1)尽量不要在 MySQL 服务器运行的机器上进行测试,一方面可能无法体现网络 (哪怕是局域网) 的影响,另一方面,sysbench 的运行 (尤其是设置的并发数较高时) 会影响 MySQL 服务器的表现。

(2)可以逐步增加客户端的并发连接数(ndash;thread 参数),观察在连接数不同情况下,MySQL 服务器的表现; 如分别设置为 10,20,50,100 等。

(3)一般执行模式选择 complex 即可,如果需要特别测试服务器只读性能,或不使用事务时的性能,可以选择 simple 模式或 nontrx 模式。

(4)如果连续进行多次测试,注意确保之前测试的数据已经被清理干净。

下面是 sysbench 使用的一个例子:

(1)准备数据

sysbench ./tests/include/oltp_legacy/oltp.lua --mysql-host=192.168.65.66 --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.65.66 --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.65.66 --mysql-port=3306 --mysql-user=root --mysql-password=123456 cleanup

5、测试结果

测试结束后,查看输出文件,如下所示:

其中,对于我们比较重要的信息包括:

queries:查询总数及 qps

transactions:事务总数及 tps

Latency-95th  percentile:前 95% 的请求的 *** 响应时间,本例中是 344 毫秒,这个延迟非常大,是因为我用的 MySQL 服务器性能很差; 在正式环境中这个数值是绝对不能接受的。

三、建议

下面是使用 sysbench 的一些建议。

1、在开始测试之前,应该首先明确:应采用针对整个系统的基准测试,还是针对 MySQL 的基准测试,还是二者都需要。

2、如果需要针对 MySQL 的基准测试,那么还需要明确精度方面的要求:是否需要使用生产环境的真实数据,还是使用工具生成也可以; 前者实施起来更加繁琐。如果要使用真实数据,尽量使用全部数据,而不是部分数据。

3、基准测试要进行多次才有意义。

4、测试时需要注意主从同步的状态。

5、测试必须模拟多线程的情况,单线程情况不但无法模拟真实的效率,也无法模拟阻塞甚至死锁情况。

关于如何理解 MySQL 基准测试和 sysbench 工具问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注丸趣 TV 行业资讯频道了解更多相关知识。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-19发表,共计4563字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)