基准性能测试工具sysbench使用教程

基准性能测试工具sysbench使用教程

一、sysbench介绍

sysbench是一个开源的多线程性能测试工具,广泛用于对操作系统整体性能和数据库(主要为 MySQL 和 PostgreSQL)进行基准测试。该工具提供了大量lua脚本可用于常见场景的测试,并且支持自定义lua脚本实现更灵活的测试。

基准测试可以对系统、软件的性能进行量化,在服务器或者软件交付后,通过早期的能力评估与日后使用过程中进行对比分析,便于发现性能瓶颈。比如通过 sysbench 对数据库做压测,评估在当前配置下可以承载的最大并发数、对磁盘读写性能进行压测,知道磁盘最大吞吐量等。在进行测试时要重复多次并记录好参数、版本、测试方法,最终形成对比报告。

二、安装sysbench

sysbench 1.0以后已经停止对Windows的支持,只能运行于Linux平台

curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bash
sudo yum -y install sysbench
#安装完成后查看版本验证
sysbench --version
sysbench 1.0.20

三、sysbench参数说明

1、基本命令格式

sysbench [options] [testname] [command]

[options]:可选参数

[testname]:指定sysbench内置测试类型,如 cpu、memory、fileio(磁盘IO)、oltp_read_write(数据库OLTP读写性能),不同类型用处不同

[command]:指定执行测试时的具体操作,包括 prepare(准备测试数据)、run(运行测试)、cleanup(清理测试数据)

2、可选参数介绍

[options]通用参数介绍

--threads=N             #压测线程数,默认为1
--events=N             #压测时的事务数,默认为0表示不限制
--time=N              #压测时长,单位为秒
--rate=N              #事务速率,0为不限制
--report-interval=N        #压测期间报告输出频率,0表示不输出
--db-driver=S            #指定数据库驱动,可选mysql和pgsql,默认mysql

MySQL专属参数

--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              # 使用的数据库名,默认 sbtest
--mysql-ssl[=on|off]           # 是否使用 SSL 连接
--mysql-ssl-cipher=STRING      # 指定 SSL 加密套件
--mysql-compression[=on|off]   # 是否启用压缩
--mysql-debug[=on|off]         # 是否跟踪所有客户端库调用
--mysql-ignore-errors=[LIST]   # 忽略指定错误码或 all,默认忽略部分死锁等
--mysql-dry-run[=on|off]       # 干跑模式,不实际执行数据库 API,只模拟成功

PostgreSQL专属参数

--pgsql-host=STRING            # PostgreSQL 主机地址
--pgsql-port=N                 # PostgreSQL 端口号
--pgsql-user=STRING            # PostgreSQL 用户名
--pgsql-password=STRING        # PostgreSQL 密码
--pgsql-db=STRING              # 使用的数据库名

fileio专属参数

--file-total-size=SIZE    #模拟磁盘压测时生成的文件大小
--file-num=N	          #生成的文件数,用于并发测试
--file-block-size=SIZE	  #I/O块大小,默认16K
--file-test-mode=MODE	  #I/O模式,分为seqrd(顺序读)、seqwr(顺序写)、rndrd(随机读)、rndwr(随机写)、rndrw(随机读写)等
--file-io-mode=MODE	  #I/O调用方式,分为sync(同步)、async(异步)、fastmmap、mmap	sync
--file-extra-flags=FLAG	  #打开文件时使用额外标志,如direct(绕过文件缓存)
--file-rw-ratio=N	  #读写比,适用于rndrw模式,值为0~100,如1表示1%读,99%写

四、sysbench使用示例

1、测试磁盘性能

· 创建测试文件

#该命令表示生成4个块大小为16K的测试文件,总大小为100G
sysbench fileio --file-num=4 --file-block-size=16384 --file-total-size=100G \
prepare

sysbench1.png

· 执行测试

#开启4个线程,对4个共计100G的文件进行60秒的随机读写(rndrw)测试,并且每30秒输出一次
sysbench fileio --file-num=4 --file-block-size=16384 --file-total-size=100G \
--file-test-mode=rndrd --time=60 --threads=4 --report-interval=30 \
run

sysbench2.png· 测试报告

根据测试结果可以看出磁盘性能情况,这里为读 57.27 MiB/s,写 38.18 MiB/s

sysbench3.png· 清理测试文件

执行命令后,之前生成的测试文件会自动删除

sysbench fileio cleanup

2、测试MySQL性能

· 创建测试数据库

#创建测试数据存放库,sbtest是sysbench默认用到的库名
mysql > create database sbtest;

· 准备测试数据

# 指定测试脚本,这里使用的oltp_read_write脚本,用于测试OLTP性能
sysbench /usr/share/sysbench/oltp_read_write.lua \ 
--mysql-host=172.20.1.172  --mysql-port=3306 --mysql-user=root --mysql-password=123456 \ 
--threads=8 --table_size=1000000 --tables=20 \ 
prepare

· 执行测试

#指定时间开始测试,在该阶段可以逐步增加线程,观察CPU在什么情况下会跑满
sysbench /usr/share/sysbench/oltp_read_write.lua \
--mysql-host=172.20.1.172 --mysql-port=3306 --mysql-user=root --mysql-password=123456  \
--threads=8 --tables=20 --time=300 --report-interval=30 \
run

· 清理测试数据

#要加上--tables选项,否则只清理第一张表
sysbench /usr/share/sysbench/oltp_read_write.lua  \
--mysql-host=172.20.1.172  --mysql-port=3306 --mysql-user=root --mysql-password=123456  \
--tables=100 \
cleanup

· 测试报告

[22s] thds: 10 tps: 380.99 qps: 7312.6 (r/w/o: 5132.9/1155.8/1321.5) lat (ms, 95%): 21.33 err/s: 0.00 reconn/s: 0.00

输出报告中,thds: 10表示有10个线程在压测;tps: 380.99表示每秒执行了380.99个事务;qps: 7610.20表示每秒可以执行7610.20个请求以及具体请求分布情况


在对数据库进行测试时,可以关注报告中response time、transactions(TPS)、queries(QPS)、Latency(响应时间)这几个值,比如transactions: 105180( 350.6 per sec. )表示一共执行了10万多个事务,每秒执行350多个事务。在测试的时候可以逐渐增加并发线程,然后观察线程达到什么量级后QPS无法再获得提升,然后在提升并发的同时还需要观察CPU、内存等资源消耗情况。在硬件负载情况比较正常的范围内,哪怕负载相对较高一些也还是可以继续增加线程数量和提高数据库的QPS。当增加线程数量后发现在某个QPS数值下服务器CPU、内存、网络和磁盘的负载已经比较高了,那么说明基本已经到了性能的瓶颈了,此时就不能继续增加线程数来提高数据库QPS了。当压测结果不理想时第一时间查看CPU使用率,如果出现CPU总使用率低或iowait、system高的情况,需要检查是否有开启SSL或者buffer_size配置不合理等情况

sysbench4.png

文章评论

猜你喜欢

NTP时间同步服务配置教程

运维技术 NTP时间同步服务配置教程

一、什么是NTP时间同步NTP是网络时间协议Network Time Protocol的简称。通过 NTP 服务可以确保不同设备或者服务之间的时间一致性,尤其是一些高可用或集群化的服务,节点之间的时间...

数据库服务器资源优化(2)关闭THP透明大页

运维技术 数据库服务器资源优化(2)关闭THP透明大页

一、什么是HugePage透明大页(Transparent HugePages,简称THP)。在 Linux 操作系统中,内存以页(Page)为单位进行管理,每个页默认 4KB。而 HugePages...

数据库服务器资源优化(1)关闭NUMA

运维技术 数据库服务器资源优化(1)关闭NUMA

一、什么是NUMA在当前主流服务器上,通常是多个CPU协同工作,然后每个CPU可以支持多个物理核。应用程序可以在不同的处理器上运行。比如先在CPU1上运行一段时间,然后再被调度到CPU2上运行,这种被...