sysbench是一个模块化的、跨平台、多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况。
主要测试方式 | |||||
---|---|---|---|---|---|
cpu性能 | 磁盘io性能 | 调度程序性能 | 内存分配及传输速度 | POSIX线程性能 | 数据库性能(OLTP基准测试) |
找范围内最大素数{时间越短越好} | 不同场景下IOPS{越大越好} | 线程并发执行,循环响应信号量花费的时间{越少越好} | 以不同块大小传输一定数量的数据吞吐量大小{越大越好} | 并发线程同时申请互斥锁循环一定次数花费的时间{越少越好} | qps、tps越高越好 |
目前sysbench主要支持 MySQL,pgsql,oracle 这3种数据库。
安装测试环境为:RHEL7.2 MariaDB5.5.44
安装sysbench-0.5
源码地址https://github.com/BoobooWei/sysbench/archive/master.zip
[root@localhost ~]# unzip sysbench-master.zip |
测试
MySQL数据库测试
sysbench 0.5通过一系列LUA脚本来替换之前的oltp,来模拟更接近真实的基准测试环境。这些测试脚本包含:insert.lua、oltp.lua、parallel_prepare.lua、select_random_points.lua、update_index.lua、delete.luaoltp_simple.lua、select.lua、select_random_ranges.lua、update_non_index.lua,脚本使用方式基本类似。
sysbench 0.5默认使用sbtest库,但是需要自己手工先创建好,也可以使用—mysql-db指定,其他非默认项指定选项:
—mysql-host
—mysql-port
—mysql-socket
—mysql-user
—mysql-password
—mysql-db
—mysql-ssl
prepare
生成表并插入数据,可使用parallel_prepare.lua脚本来并行准备数据。
-–db-driver 服务器类型 mysql | drizzle,默认为mysql
-–mysql-table-engine 表存数引擎
-–myisam-max-rows MyISAM表MAX_ROWS选项(用于大表)
–-oltp-table-count 生成表数量[sbtest1、sbtest2…]
-–oltp-table-size 生成表的行数
-–oltp-secondary ID列生成二级索引而不是主键
–-oltp-auto-inc设置ID列是否自增 on | off,默认为on —oltp-read-only=on
—test=sysbench-0.5/sysbench/tests目录下测试脚本
sysbench \ |
[root@localhost sysbench]# sysbench --test=/root/sysbench-master/sysbench/tests/db/oltp.lua --mysql-host=localhost --mysql-port=3306 --mysql-user=root --mysql-password=uplooking --oltp-table-size=10000 --num-threads=8 --max-time=10 --mysql-db=sbtest --max-requests=0 --oltp-test-mode=complex --report-interval=1 --mysql-table-engine=innodb prepare |
如果是多表呢并增加表的大小,情况又会如何呢?
[root@localhost sysbench]# sysbench --test=/root/sysbench-master/sysbench/tests/db/oltp.lua --mysql-host=localhost --mysql-port=3306 --mysql-user=root --mysql-password=uplooking --oltp-tables-count=10 --oltp-table-size=100000 --num-threads=128 --max-time=60 --mysql-db=sbtest --max-requests=0 --oltp-test-mode=complex --report-interval=1 --mysql-table-engine=innodb prepare |
CPU测试
使用64位整数,测试计算素数直到某个最大值所需要的时间
sysbench --test=cpu --cpu-max-prime=2000 run
查看CPU信息方法,查看物理cpu个数
grep "physical id" /proc/cpuinfo | sort -u | wc -l
查看核心数量
grep "core id" /proc/cpuinfo | sort -u | wc -l
查看线程数量
grep "processor" /proc/cpuinfo | sort -u | wc -l
在sysbench的测试中,—num-threads取值为”线程数量”即可
线程(thread)测试
测试线程调度器的性能。对于高负载情况下测试线程调度器的行为非常有用
sysbench --test=threads --num-threads=64 --thread-yields=100 --thread-locks=2 run
文件IO性能测试
生成需要的测试文件,文件总大小5G,16个并发线程。执行完后会在当前目录下生成一堆小文件
sysbench --test=fileio --num-threads=16 --file-total-size=5G prepare
执行测试,指定随机读写模式:
- seqwr顺序写入
- seqrewr顺序重写
- seqrd顺序读取
- rndrd随机读取
- rndwr随机写入
- rndrw混合随机读/写
sysbench --test=fileio --num-threads=16 --init-rng=on --file-total-size=5G --file-test-mode=rndrw run
除测试文件
sysbench --test=fileio --num-threads=16 --file-total-size=5G cleanup
内存测试
内存测试测试了内存的连续读写性能。
sysbench --test=memory --num-threads=16 --memory-block-size=8192 --memory-total-size=1G run
互斥锁(Mutex)测试
测试互斥锁的性能,方式是模拟所有线程在同一时刻并发运行,并都短暂请求互斥锁X。
sysbench --test=mutex --num-threads=16 --mutex-num=1024 --mutex-locks=10000 --mutex-loops=5000 run
安装sysbench-0.4
源码在线下载地址:http://101.96.10.46/downloads.mysql.com/source/sysbench-0.4.12.10.tar.gz
源码步骤
数据库rpm包安装则直接编译
如果数据库是rpm包安装则直接执行以下步骤,否则在configure的时候需要指定mysql数据库的库libs和includes路径
- tar zxf sysbench-0.4.8.tar.gz
- cd sysbench-0.4.8
- ./configure && make && make install
- strip /usr/local/bin/sysbench
数据库为源码编译
数据库源码编译后路径如下:
数据目录 /usr/local/mysql
includes目录 /usr/local/mysql/include
libs目录 /usr/local/mysql/lib
执行以下步骤:
- tar zxf sysbench-0.4.8.tar.gz
- cd sysbench-0.4.8
- ./configure —with-mysql-includes=/usr/local/mysql/include —with-mysql-libs=/usr/local/mysql/lib && make && make install
- strip /usr/local/bin/sysbench
rpm包安装步骤
依赖包:
mariadb-devel-5.5.44-2.el7.x86_64
postgresql-libs.x86_64 0:9.2.13-1.el7_1
[root@localhost ~]# rpm -q mariadb-devel
mariadb-devel-5.5.44-2.el7.x86_64
[root@localhost ~]#
[root@localhost ~]# rpm -ivh sysbench-0.4.12-12.el7.x86_64.rpm
warning: sysbench-0.4.12-12.el7.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID 764429e6: NOKEY
error: Failed dependencies:
libpq.so.5()(64bit) is needed by sysbench-0.4.12-12.el7.x86_64
[root@localhost ~]# yum localinstall -y sysbench-0.4.12-12.el7.x86_64.rpm
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Examining sysbench-0.4.12-12.el7.x86_64.rpm: sysbench-0.4.12-12.el7.x86_64
Marking sysbench-0.4.12-12.el7.x86_64.rpm to be installed
Resolving Dependencies
Running transaction check
Package sysbench.x86_64 0:0.4.12-12.el7 will be installed
Processing Dependency: libpq.so.5()(64bit) for package: sysbench-0.4.12-12.el7.x86_64
Running transaction check
Package postgresql-libs.x86_64 0:9.2.13-1.el7_1 will be installed
Finished Dependency Resolution
Dependencies Resolved
=====================================================================================================================================
Package Arch Version Repository Size
=====================================================================================================================================
Installing:
sysbench x86_64 0.4.12-12.el7 /sysbench-0.4.12-12.el7.x86_64 172 k
Installing for dependencies:
postgresql-libs x86_64 9.2.13-1.el7_1 _mnt 230 k
Transaction Summary
=====================================================================================================================================
Install 1 Package (+1 Dependent package)
Total size: 402 k
Total download size: 230 k
Installed size: 836 k
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : postgresql-libs-9.2.13-1.el7_1.x86_64 1/2
Installing : sysbench-0.4.12-12.el7.x86_64 2/2
Verifying : sysbench-0.4.12-12.el7.x86_64 1/2
Verifying : postgresql-libs-9.2.13-1.el7_1.x86_64 2/2
Installed:
sysbench.x86_64 0:0.4.12-12.el7
Dependency Installed:
postgresql-libs.x86_64 0:9.2.13-1.el7_1
Complete!
主要测试方式 | |||||
---|---|---|---|---|---|
cpu性能 | 磁盘io性能 | 调度程序性能 | 内存分配及传输速度 | POSIX线程性能 | 数据库性能(OLTP基准测试) |
找范围内最大素数{时间越短越好} | 不同场景下IOPS{越大越好} | 线程并发执行,循环响应信号量花费的时间{越少越好} | 以不同块大小传输一定数量的数据吞吐量大小{越大越好} | 并发线程同时申请互斥锁循环一定次数花费的时间{越少越好} | qps、tps越高越好 |
开始测试
编译成功之后,就要开始测试各种性能了,测试的方法官网网站上也提到一些,但涉及到 OLTP 测试的部分却不够准确。在这里我大致提一下:
cpu性能测试
进行素数的加法运算:指定最大的素数为 20000,记录测试结果(可以根据机器cpu的性能来适当调整数值)
sysbench —test=cpu —cpu-max-prime=20000 run
[root@localhost ~]# sysbench --test=cpu --cpu-max-prime=20000 run |
线程测试
测试64个线程
sysbench —test=threads —num-threads=64 —thread-yields=100 —thread-locks=2 run
sysbench 0.4.12: multi-threaded system evaluation benchmark |
磁盘IO性能测试
最大创建16个线程,创建的文件总大小为3G,文件读写模式为随机读
sysbench —test=fileio —num-threads=16 —file-total-size=3G —file-test-mode=rndrw prepare #创建测试文件
sysbench —test=fileio —num-threads=16 —file-total-size=3G —file-test-mode=rndrw run #执行测试文件
sysbench —test=fileio —num-threads=16 —file-total-size=3G —file-test-mode=rndrw cleanup #删除测试文件
[root@localhost ~]# sysbench --test=fileio --num-threads=16 --file-total-size=3G --file-test-mode=rndrw prepare |
内存测试
测试过程是在内存中传输 4G 的数据量,每个 block 大小为 8K。
sysbench —test=memory —memory-block-size=8k —memory-total-size=4G run
OLTP测试
测试的表存储引擎类型为innodb,表最大记录数为 1000000,
测试 OLTP 时,先创建数据库 sbtest,或者自己用参数 —mysql-db 来指定其他数据库。
—test=oltp 制定测试类型为OLTP
—db-driver=mysql 测试的数据库类型为mysql
—mysql-table-engine 指定创建的测试表sbtest为 innodb 储引擎类型
—mysql-host=localhost —mysql-user=root —mysql-password=uplooking 分别为服务器ip,用户名和密码
—oltp-table-size=10000 创建的测试表的大小为1万行
—num-threads=128 线程数量为128
[root@localhost ~]# sysbench --test=oltp --db-driver=mysql --mysql-host=localhost --mysql-user=root --mysql-password=uplooking --mysql-db=sbtest --mysql-table-engine=innodb --oltp-table-size=10000 --num-threads=128 prepare |
50.00 per sec 为每秒事务量,1195.09 per sec 每秒的读写请求数,total time: 200.0198s 总的用时