MySQL 之 Sysbench 简单基准测试
基准测试
基准测试的简单定义就是对于某个系统的一种硬件性能测试,它没有模拟真实的业务场景,使用工具包自己生成的数据对系统进行一个测试,它更care系统的硬件能力,例如,测试数据库实际的读写性能等。而对真实逻辑较少关注。
觉得我讲的简单定义不专业的话,这里维基百科是这样介绍的:
Sysbench
Sysbench可以用于测量数据库的性能和测试数据库所在服务器的性能,它是MySQL诸多工具中,最有用的工具之一,相比Mysqlslap可以对硬件性能进行测试,非常多人使用的一个工具。
Sysbench 测试类别
* 线程测试
* CPU测试
* 内存测试
* 磁盘测试
* 数据库测试
Sysbench 安装(Ubuntu)
sudo apt-get install sysbench
安装完毕
安装1.0版本的方法:
Ubuntu:
curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.deb.sh | sudo bash
sudo apt -y install sysbench
CentOS:
curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bash
sudo yum -y install sysbench
安装完毕查看版本:
1.0版本安装完毕
Sysbench使用格式:
sysbench script [options] [command]
--options 各种参数
--command 命令
options:
--mysql-host IP地址
--mysql-port 端口号
--mysql-user 用户名
--mysql-password 密码
--threads 并发连接数
--oltp-tables-count 测试表数量
--oltp-table-size 测试表记录 默认10000
–oltp-user-delay-min 每个请求最短等待时间。单位是ms。默认0
–oltp-user-delay-max 每个请求最长等待时间。单位是ms。默认0
–oltp-table-name 测试时使用到的表名。默认是sbtest
--time 测试执行多少秒
--report-interval 报告间隔
--oltp-test-model 执行模式:simple只测试查询 nontrx测试无事务的增删查改 complex有事务的增删改查
–oltp-dist-type 分布的随机数:uniform(均匀分布),Gaussian(高斯分布),special(空间分布)。默认是special
–oltp-dist-iter 产生数的迭代次数。默认12
command:
--prepare 生成测试数据
--run 执行测试
--cleanup 清除测试数据
Sysbench针对MySQL基准测试简单Demo使用三个指标:
TPS:事务执行数 / Per Second
QPS:请求执行完毕数(queries)/ Per Second
响应时间:处理请求平均时间
生成测试数据:
先建立一个Sysbench用的库叫做sbtest
sysbench /usr/share/sysbench/tests/include/oltp_legacy/oltp.lua --mysql-table-engine=innodb --mysql-host=自己的ip地址 --mysql-port=3306 --mysql-user=test --mysql-password=自己的密码 --oltp-tables-count=20 --oltp-table-size=200000 prepare
生成20张表,每张表20万的测试数据,加起来差不多400万,模拟一个小系统
因为这个数据库配置不高所以要等待一段时间。
对于真实系统测试需要导入非常大量的数据,并且时间在一天以上结果会比较准
当所有的数据都生成完毕之后,我们就可以开始基准测试了:
开始测试:
sysbench /usr/share/sysbench/tests/include/oltp_legacy/oltp.lua --mysql-table-engine=innodb --mysql-host=(自己的ip地址) --mysql-port=3306 --mysql-user=test --mysql-password=(自己的密码) --oltp-test-mode=complex --threads=10 --time=300 --report-interval=10 run >> /api/sysbench.log
参数的定义在上面都列出来了不在解释
分析结果:
sysbench 1.0.17 (using bundled LuaJIT 2.1.0-beta2)
Running the test with following options:
Number of threads: 10
Report intermediate results every 10 second(s)
Initializing random number generator from current time
Initializing worker threads...
Threads started!
[ 10s ] thds: 10 tps: 2.50 qps: 61.88 (r/w/o: 45.89/10.00/6.00) lat (ms,95%): 5507.54 err/s: 0.00 reconn/s: 0.00
[ 20s ] thds: 10 tps: 2.79 qps: 56.48 (r/w/o: 39.71/11.18/5.59) lat (ms,95%): 8638.96 err/s: 0.00 reconn/s: 0.00
[ 30s ] thds: 10 tps: 2.91 qps: 56.63 (r/w/o: 38.89/11.93/5.81) lat (ms,95%): 6360.91 err/s: 0.00 reconn/s: 0.00
[ 40s ] thds: 10 tps: 2.50 qps: 52.10 (r/w/o: 37.40/9.70/5.00) lat (ms,95%): 7086.63 err/s: 0.00 reconn/s: 0.00
[ 50s ] thds: 10 tps: 2.90 qps: 57.10 (r/w/o: 39.70/11.60/5.80) lat (ms,95%): 6360.91 err/s: 0.00 reconn/s: 0.00
[ 60s ] thds: 10 tps: 2.90 qps: 57.60 (r/w/o: 40.20/11.60/5.80) lat (ms,95%): 8038.61 err/s: 0.00 reconn/s: 0.00
[ 70s ] thds: 10 tps: 2.60 qps: 51.70 (r/w/o: 36.10/10.40/5.20) lat (ms,95%): 8638.96 err/s: 0.00 reconn/s: 0.00
[ 80s ] thds: 10 tps: 2.80 qps: 56.40 (r/w/o: 39.60/11.20/5.60) lat (ms,95%): 6594.16 err/s: 0.00 reconn/s: 0.00
中间忽略
SQL statistics:
queries performed:
read: 11774 总的读的数量
write: 3364 总的写的数量
other: 1682 其他操作总数(增删查改外)
total: 16820 所有的总数
transactions: 841 (2.04 per sec.) 总事务数(每秒事务数目TPS)
queries: 16820 (40.73 per sec.) 查询总数(每秒的查询数QPS)
ignored errors: 0 (0.00 per sec.)
reconnects: 0 (0.00 per sec.)
General statistics:
total time: 412.9988s 总花费时间
total number of events: 841 总发生事务数
Latency (ms):
min: 450.54 最小花费时间
avg: 3721.21 平均花费时间
max: 383095.66 最长花费时间
95th percentile: 7215.39 百分之95的平均花费时间
sum: 3129536.86
Threads fairness: 并发
events (avg/stddev): 84.1000/26.28 处理总事件的数目(最大请求数量)/标准偏差
execution time (avg/stddev): 312.9537/33.42 总的执行的时间/标准偏差(也就是 平均数/标准偏差)
测试的指标含义都在上面的备注里。
下图是Linux下的实际结果截图:
以上就是Sysbench对于MySQL基准测试的一个简单Demo
转载请注明出处:
https://blog.****.net/qq_36652619