MySql性能测试工具-sysbench

sysbench简介
sysbench是跨平台的基准测试工具,支持多线程,支持多种数据库;主要包括以下几种测试:
cpu性能
磁盘io性能
调度程序性能
内存分配及传输速度
POSIX线程性能
数据库性能(OLTP基准测试)
本文主要介绍对数据库性能的测试。


1. 下载安装包,地址 https://github.com/akopytov/sysbench

#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 -y


3.开始安装

#./autogen.sh

#./configure


4. 如果是yum安装的mysql,不知道路径在哪里。想查找mysql的安装路径需要安装mysql-devel,才能使用mysql_config

#yum install -y mysql-devel


5. 执行./configure

./configure --with-mysql-includes=/usr/local/mysql/include --with-libs=/usr/local/mysql/lib

#make&&make install


6. 添加变量:

#export LD_LIBRARY_PATH=/usr/local/mysql/lib/

#sysbench --help

#sysbench --version
sysbench 1.0.12 (using bundled LuaJIT 2.1.0-beta2)


在执行sysbench时,应该注意:
(1)尽量不要在MySQL服务器运行的机器上进行测试,一方面可能无法体现网络(哪怕是局域网)的影响,另一方面,sysbench的运行(尤其是设置的并发数较高时)会影响MySQL服务器的表现。
(2)可以逐步增加客户端的并发连接数(--thread参数),观察在连接数不同情况下,MySQL服务器的表现;如分别设置为10,20,50,100等。
(3)一般执行模式选择complex即可,如果需要特别测试服务器只读性能,或不使用事务时的性能,可以选择simple模式或nontrx模式。
(4)如果连续进行多次测试,注意确保之前测试的数据已经被清理干净。


(1)准备数据

mysql>create database sbtest;

sysbench --test=/usr/local/share/sysbench/tests/include/oltp_legacy/oltp.lua --oltp-table-size=1000000 --mysql-user=root --mysql-password='123456' --mysql-socket=/usr/local/mysql/mysql.sock prepare


(2)执行测试
sysbench --test=/usr/local/share/sysbench/tests/include/oltp_legacy/oltp.lua --oltp-table-size=1000000 --mysql-user=root --mysql-password='123456' --mysql-socket=/usr/local/mysql/mysql.sock --max-time=60 --oltp-read-only=on --max-requests=0 --num-threads=8 run


(3)清理数据
sysbench --test=/usr/local/share/sysbench/tests/include/oltp_legacy/oltp.lua --oltp-table-size=1000000 --mysql-user=root --mysql-password='123456' --mysql-socket=/usr/local/mysql/mysql.sock cleanup

SQL statistics:
queries performed:
read: 313488 --读总数
write: 89568 --写总数
other: 44784 --其他操作(CURD之外的操作,例如COMMIT)
total: 447840 --全部总数
transactions: 22392 (186.27 per sec.) --总事务数(每秒事务数)
queries: 447840 (3725.43 per sec.) --总数(每秒总数)
ignored errors: 0 (0.00 per sec.) --总忽略错误总数(每秒忽略次数)
reconnects: 0 (0.00 per sec.) --重连总数(每秒重连次数)
General statistics:
total time: 120.2098s --总耗时
total number of events: 22392 --共发生多少事务数
Latency (ms):
min: 105.91 --最小耗时
avg: 160.86 --平均耗时
max: 850.77 --最长耗时
95th percentile: 223.34 --超过95%平均耗时
sum: 3601892.56
Threads fairness:
events (avg/stddev): 746.4000/4.95 --总处理事件数/标准偏差
execution time (avg/stddev): 120.0631/0.05--总执行时间/标准偏差


对CPU的性能测试通常有:1.质数计算;2圆周率计算;sysbench使用的就是通过质数相加的测试。对CPU测试直接运行run即可。
sysbench --threads=20 --events=10000 --debug=on --test=cpu --cpu-max-prime=20000 run
20个线程执行1万条请求,每个请求执行质数相加到20000


内存测试

测试8K顺序分配:
sysbench --threads=12 --events=10000 --test=memory --memory-block-size=8K --memory-total-size=100G --memory-access-mode=seq run
测试8K随机分配。
sysbench --threads=12 --events=10000 --test=memory --memory-block-size=8K --memory-total-size=100G --memory-access-mode=rnd run


文件io测试

IO的测试主要用于测试IO的负载性能。主要测试选项为--file-test-mode。还有可以关注的参数包括--file-block-size、--file-io-mode、--file-fsync-freq 、--file-rw-ratio,具体参数含义请见参数解释章节。
sysbench --threads=12 --events=10000 fileio --file-total-size=3G --file-test-mode=rndrw prepare
sysbench --threads=12 --events=10000 fileio --file-total-size=3G --file-test-mode=rndrw run
sysbench --threads=12 --events=10000 fileio --file-total-size=3G --file-test-mode=rndrw cleanup
对比两台服务器的io性能,需要跑相同的线程


锁测试

互斥锁测试模拟所有线程在同一时刻并发运行。
sysbench --threads=12 mutex --mutex-num=1024 --mutex-locks=10000 --mutex-loops=10000 run

线程测试

sysbench threads --num-threads=64 --thread-yields=100 --thread-locks=2 run