背景
公司打算2018年有把服务迁移到云上的计划,于是选择了市场上的几款云产品来进行比较,其中对磁盘IO与mysql读写性能的测试是很重要的一个环节。故此,针对云产品的磁盘IO以及云数据库的读写,进行了一些粗略的测试。
这里测试的服务器来自腾讯云,这里暂且不讨论云的性能如何,只针对测试的方法来进行讲诉。
sysbench工具
测试连续IO,我们可以利用linux的dd命令,但是如何测试随机IO呢?sysbench就是一个用于测试随机IO的很好选择。
安装sysbench:
项目地址:https://github.com/akopytov/sysbench
1
2
3
4
5
6
7
8
9
|
下载项目到本地,解压:
# unzip master.zip
# cd sysbench-master/
# ./autogen.sh
编译参数中指定mysql相关目录
# ./configure --prefix=/usr/local/sysbench --with-mysql-includes=/usr/local/mysql/include --with-mysql-libs=/usr/local/mysql/lib
# echo '/usr/local/mysql/lib/' >> /etc/ld.so.conf
# ldconfig
|
安装完sysbench之后,就可以进行IO的测试了,这里测试的磁盘,都是腾讯云的SSD数据盘:
连续IO测试(dd)
测试方法:
数据盘(写):# dd if=/dev/zero of=/opt/data/test.iso bs=1024M count=5 conv=fdatasync
数据盘(读):# dd if=/opt/data/test.iso of=/dev/zero bs=1024M count=5 iflag=direct
随机IO测试(sysbench)
测试方法:
数据盘:
# cd /opt/data/
# sysbench --test=fileio --num-threads=16 --file-total-size=3G --file-test-mode=rndrw prepare
Mysql oltp基准测试
利用项目中的oltp.lua文件来准备测试所需要的数据:
# cd /usr/local/src/sysbench-master/tests/include/oltp_legacy/ # sysbench --mysql-host=xx.xx.xx.xx --mysql-port=3306 --mysql-user=root --mysql-password=xxxxxxx --test=oltp.lua --oltp_tables_count=10 --oltp-table-size=1000000 --rand-init=on --db-driver=mysql prepare
--test=oltp.lua 表示调用当前目录下oltp.lua 脚本进行 oltp 模式测试
--oltp_tables_count=10 表示会生成 10 个测试表
--oltp-table-size=100000 表示每个测试表填充数据量为 100000
--rand-init=on 表示每个测试表都是用随机数据来填充的
--db-driver=mysql 代表使用mysql驱动连接数据库
开始测试:
1
|
# sysbench --mysql-host=xx.xx.xx.xx --mysql-port=3306 --mysql-user=root --mysql-password=xxxxxxx --test=oltp.lua --oltp_tables_count=10 --oltp-table-size=100000 --threads=8 --oltp-read-only=off --report-interval=10 --rand-type=uniform --time=3600 --max-requests=0 --percentile=99 --db-driver=mysql run
|
--num-threads=8 表示发起 8个并发连接
--oltp-read-only=off 表示不要进行只读测试,也就是会采用读写混合模式测试
--report-interval=10 表示每10秒输出一次测试进度报告
--rand-type=uniform 表示随机类型为固定模式,其他几个可选随机模式:uniform(固定),gaussian(高斯),special(特定的),pareto(帕累托)
--time=3600 表示最大执行时长为 1个小时
--max-requests=0 表示总请求数为 0,因为上面已经定义了总执行时长,所以总请求数可以设定为 0;也可以只设定总请求数,不设定最大执行时长
--percentile=99 表示设定采样比例,默认是 95%,即丢弃1%的长请求,在剩余的99%里取最大值
测试结果:
可以看到相关的测试结果:
Mysql-tps:926.04/S
Mysql-qps:18520.74/s
删除测试数据:
1
|
# sysbench -mysql-host=xx.xx.xx.xx --mysql-port=3306 --mysql-user=root --mysql-password=xxxxxx --test=oltp.lua --oltp_tables_count=10 --oltp-table-size=100000 --threads=8 --oltp-read-only=off --report-interval=10 --rand-type=uniform --time=3600 --max-requests=0 --percentile=99 --db-driver=mysql cleanup
|