• 进入"运维那点事"后,希望您第一件事就是阅读“关于”栏目,仔细阅读“关于Ctrl+c问题”,不希望误会!

MySQL基准测试工具sysbench实践

MySQL 彭东稳 7年前 (2017-06-12) 28316次浏览 已收录 1个评论

一、Sysbench介绍

SysBench是一个模块化的、跨平台、多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况。它主要包括以下几种方式的测试:

1、cpu性能

2、磁盘io性能

3、调度程序性能

4、内存分配及传输速度

5、POSIX线程性能

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

Sysbench的oltp主要用于评估测试各种不同系统参数下的数据库负载情况。目前sysbench的数据库测试支持MySQL、PostgreSQL、Oracle。相比0.4版本,后续的版本oltp测试主要结合了lua脚本,不需要修改源码,通过自定义lua脚本就可以实现不同业务类型的测试。

二、Sysbench安装使用

如果没有什么特别需求,直接使用EPEL源安装Sysbench即可。

General options

--threads=N

创建测试线程的数量,默认为[1]。

--events=N

事件最大数量,默认为[0],不限制。

--time=N

最大执行时间,单位是s,默认是[0],不限制。

--forced-shutdown=STRING

超过max-time强制中断,默认是[of]f。

--thread-stack-size=SIZE

每个线程的堆栈大小,默认是[64k]。

--rate=N

average transactions rate. 0 for unlimited rate [0]。

--report-interval=N

报告中间统计信息间隔,0代表禁止,默认为[0]。

--report-checkpoints=[LIST,...]

转储完全统计信息并在指定时间点复位所有计数器,参数是逗号分隔值的列表,表示从必须执行报告检查点的测试开始所经过的时间(以秒为单位)。 默认情况下,报告检查点处于关闭状态[off]。

--debug[=on|off]

是否显示更多的调试信息,默认是[off]。

--validate[=on|off]

在可能情况下执行验证检查,默认是[off]。

--help[=on|off]

输出help信息,并退出。

--version[=on|off]

输出版本信息,并退出。

--config-file=FILENAME

配置文件。

--tx-rate=N

deprecated alias for –rate[0].

--max-requests=N

deprecated alias for –events[0].

--max-time=N

deprecated alias for –time[0].

--num-threads=N

deprecated alias for –threads[1].

Pseudo-Random Numbers Generator options

--rand-type=STRING

分布的随机数{uniform(均匀分布),Gaussian(高斯分布),special(空间分布)},默认是special。

--rand-spec-iter=N

产生数的迭代次数,默认是12。

--rand-spec-pct=N

值的百分比被视为’special’ (for special distribution),默认是1。

--rand-spec-res=N

‘special’的百分比值,默认是75。

--rand-seed=N

随机数发生器的种子,值为0时,将当前时间用作rng种子,默认值[0]。

--rand-pareto-h=N

参数h用于pareto分布[0.2]。

Log options

--verbosity=N

日志详细级别{5-调试, 0-仅重要消息},默认未[3]。

--percentile=N

在延迟统计数据中计算的百分点 (1-100),使用特殊值0来禁用百分比计算[95]。

--histogram[=on|off]

在报告中打印滞后时间直方图,默认未[off]。

Compiled-in database drivers

mysql

MySQL驱动。

pgsql

PostgreSQ驱动。

mysql options

--mysql-host=[LIST,...]

MySQL服务器地址[localhost]。

--mysql-port=[LIST,...]

MySQL服务器端口[3306]。

--mysql-socket=[LIST,...]

MySQL服务器的socket地址。

--mysql-user=STRING

MySQL服务器的用户名[sbtest]。

--mysql-password=STRING

MySQL用户名密码。

--mysql-db=STRING

MySQL数据库名称[sbtest]。

--mysql-compression[=on|off]

是否使用压缩[off]。

pgsql options

--pgsql-host=[LIST,...]

PostgreSQL服务器地址[localhost]。

--pgsql-port=[LIST,...]

PostgreSQL服务器端口[5432]。

--pgsql-user=STRING

PostgreSQL服务器的用户名[sbtest]。

--pgsql-password=STRING

PostgreSQL用户名密码。

--pgsql-db=STRING

PostgreSQL数据库名称[sbtest]。

Compiled-in tests

fileio

文件I/O测试。

cpu

CPU性能测试。

memory

内存速率测试。

threads

线程子系统性能测试。

mutex

互斥锁性能测试。

三、Sysbench压测MySQL

Sysbench压测MySQL流程:prepare(准备数据) -> run(运行测试) -> cleanup(清理数据)

下面是目前社区提供的lua脚步(安装sysbench默认自带)

以oltp_read_only.lua为例压测MySQL:

注意最后一行,一项测试开始前需要用prepare来准备好表和数据,run执行真正的压测,cleanup用来清除数据和表。

对run运行的测试结果解读:

我们一般关注的指标主要有:

  • response time avg:平均响应时间(后面的95%的大小可以通过–percentile=98的方式去更改)。
  • transactions:精确的说是这一项后面的TPS,但如果使用了–skip-trx=on,这项事务数为0,需要用total number of events去除以总时间,得到tps(其实还可以分为读tps和写tps)。
  • queries:用它除以总时间,得到吞吐量QPS。
  • 当然还有一些系统层面的cpu,io,mem相关指标。

四、Sysbench压测磁盘IO

在Sysbench后跟上对应的内置可测试项名称,然后跟上help即可获得帮助信息。

对于MySQL来说,一般用户可能更关心的就是磁盘性能和OLTP性能,因此上面测试了OLTP,下面就来测试一下FILEIO,对于磁盘的测试,sysbench提供了以下测试选项:

参数说明:

--file-num=N

生产测试文件的数量,默认为128。

--file-block-size=N

测试期间的块大小,如果想知道磁盘针对InnoDB存储引擎进行的测试,可以将其设置为16384,即InnoDB存储引擎页大小,默认为16384。

--file-total-size=SIZE

每个文件的带下,默认为2G。

--file-test-mode=STRING

文件测试模式,包含seqwr(顺序写)、seqrewr(顺序读写)、seqrd(顺序读)、rndrd(随机读)、rndwr(随机写)和rndrw(随机读写)。

--file-io-mode=STRING

文件操作的模式,同步还是异步,或者是选择MMAP(map映射)模式,默认为同步(sync)。

--file-async-backlog=N

打开文件时的选项,这是与API相关的参数。

--file-extra-flags=STRING

打开文件时的选项,这是与API相关的参数。可选有sync,dsync,direct。

--file-fsync-freq=N

执行fsync函数的频率,fsync主要是同步磁盘文件,因为可能有系统和磁盘缓冲的关系。默认为100,如果为0表示不使用fsync。

--file-fsync-all[=on|off]

每执行完一次写操作,就执行一次fsync,默认未off。

--file-fsync-end[=on|off]

在测试结束时,执行fsync,默认为on。

--file-fsync-mode=STRING

文件同步函数的选择,同样是和API相关的参数,由于多个操作对fdatasync支持的不同,因此不建议使用fdatasync。默认为fsync。

--file-merged-requests=N

尽可能合并此数量的io请求(0-不合并),默认为[0]。

--file-rw-ratio=N

测试时的读写比例,默认是2:1。

Sysbench的fileio测试需要经过prepare、run和cleanup三个阶段。prepare是准备阶段,生产需要的测试文件,run是实际测试阶段,cleanup是清理测试产生的文件。例如进行4个文件、总大小2GB的fileio测试:

接着就可以基于这些文件进行测试了,下面是1个线程下的随机读取性能:

上述测试的最大随机数请求是100000000次,如果在180秒内不能完成,测试即结束。测试结束后可以看到如下的测试结果:

测试结束后,记得要执行cleanup,确保测试产生的文件都已经删除。

参照随机读配置,可以接着测试随机写、随机读写、顺序写、顺序读等所有这些模式。

五、Sysbench压测内存

同样的方式,查看压测内存可用选项:

参数说明:

--memory-block-size=SIZE

测试内存块的大小,默认为1K。

--memory-total-size=SIZE

数据传输的总大小,默认为100G。

--memory-scope=STRING

内存访问的范围,包括全局和本地范围,默认为global。

--memory-hugetlb=[on|off]

是否从HugeTLB池分配内存的开关,默认为off。

--memory-oper=STRING

内存操作的类型,包括read, write, none,默认为write。

--memory-access-mode=STRING

内存访问模式,包括seq,rnd两种模式,默认为seq。

六、Sysbench压测CPU

同样的方式,查看压测CPU可用选项:

就一个选项用来指定最大的素数,具体参数可以根据CPU的性能来设置,默认为10000。

<参考>

Sysbench在美团点评中的应用


如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。
喜欢 (11)
[资助本站您就扫码 谢谢]
分享 (0)

您必须 登录 才能发表评论!

(1)个小伙伴在吐槽