数据库性能测试
测试数据量级:10张表,每张表200万条数据
使用 Sysbench 对数据库进行压测,通常分为三个步骤:
prepare,准备数据
run,运行测试模型
cleanup,清理测试数据
测试环境
测试环境 | IP | 核心 | 内存 | 磁盘类型 |
---|---|---|---|---|
物理服务器 | 10.63.4.59 | 32 | 128 | 机械磁盘 |
云平台 | 10.63.4.57 | 2 | 8 | 机械磁盘,分布式存储GlusterFS |
阿里云 | 121.40.191.216 | 8 | 8 | SSD磁盘 |
环境配置不对等的情况下,在容器启动时通过参数控制容器所使用的相关资源与云平台一致
磁盘性能测试
在测试之前首先对个环境磁盘性能使用fio工具进行测试
以下所有测试测试线程为单线程,文件大小为1G,以每次4k的io进行测试。
- 物理机
随机读
fio -direct=1 -iodepth=128 -rw=randread -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -directory=/opt/rainbond/iotest -name=Rand_Read_Testing
随机写
fio -direct=1 -iodepth=128 -rw=randwrite -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -directory=/opt/rainbond/iotest -name=Rand_Write_Testing
顺序读
fio -direct=1 -iodepth=64 -rw=read -ioengine=libaio -bs=1024k -size=1G -numjobs=1 -runtime=1000 -group_reporting -directory=/opt/rainbond/iotest/ -name=Read_PPS_Testing
顺序写
fio -direct=1 -iodepth=64 -rw=write -ioengine=libaio -bs=1024k -size=1G -numjobs=1 -runtime=1000 -group_reporting -directory=/opt/rainbond/iotest/ -name=Write_PPS_Testing
- 云平台
随机读
fio -direct=1 -iodepth=128 -rw=randread -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -directory=/grdata/iotest -name=Rand_Read_Testing
随机写
fio -direct=1 -iodepth=128 -rw=randwrite -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -directory=/grdata/iotest -name=Rand_Write_Testing
顺序读
fio -direct=1 -iodepth=64 -rw=read -ioengine=libaio -bs=1024k -size=1G -numjobs=1 -runtime=1000 -group_reporting -directory=/grdata/iotest -name=Read_PPS_Testing
顺序写
fio -direct=1 -iodepth=64 -rw=write -ioengine=libaio -bs=1024k -size=1G -numjobs=1 -runtime=1000 -group_reporting -directory=/grdata/iotest -name=Write_PPS_Testing
- 阿里云
随机读
fio -direct=1 -iodepth=128 -rw=randread -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -directory=/root/iotest -name=Rand_Read_Testing
随机写
fio -direct=1 -iodepth=128 -rw=randwrite -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -directory=/root/iotest -name=Rand_Write_Testing
顺序读
fio -direct=1 -iodepth=64 -rw=read -ioengine=libaio -bs=1024k -size=1G -numjobs=1 -runtime=1000 -group_reporting -directory=/root/iotest/ -name=Read_PPS_Testing
顺序写
fio -direct=1 -iodepth=64 -rw=write -ioengine=libaio -bs=1024k -size=1G -numjobs=1 -runtime=1000 -group_reporting -directory=/root/iotest/ -name=Write_PPS_Testing
磁盘性能测试结果
测试环境 | 测试内容 | IOPS | BW(平均IO带宽) |
---|---|---|---|
物理机 | 随机读 | 2680 | 10.5MiB/s |
云平台 | 随机读 | 591 | 2364.6KB/s |
阿里云 | 随机读 | 17.0k | 66.4MiB/s |
物理机 | 随机写 | 3405 | 13.3MiB/s |
云平台 | 随机写 | 310 | 1240.1KB/s |
阿里云 | 随机写 | 16.0k | 66.3MiB/s |
物理机 | 顺序读 | 310 | 311MiB/s |
云平台 | 顺序读 | 102 | 104742KB/s |
阿里云 | 顺序读 | 301 | 302MiB/s |
物理机 | 顺序写 | 169 | 169MiB/s |
云平台 | 顺序写 | 15 | 15515KB/s |
阿里云 | 顺序写 | 303 | 303MiB/s |
数据库测试环境准备
所有环境数据库均使用容器化部署
- 物理机
由于该测试物理机内存CPU较其他环境具有优势,所以在测试时将容器内存CPU限制为8核心8GB
部署机器信息:
IP:10.63.4.59
密码: root123
数据库端口:3308
数据库密码:****
运行数据库
docker run --name test-mysql -m 8192m --cpu-shares=1966 --cpu-quota 478000 --cpu-period 100000 -p 3308:3306 -e MYSQL_ROOT_PASSWORD=**** -v /var/lib/test-mysql:/var/lib/mysql -e --character-set-server=utf8mb4 -e MYSQL_DATABASE=systest -d mysql:5.7
参数解释
-m 限制内存使用量为8GB
–cpus 限制使用cpu核数为2核
–cpu-shares cpu相对权重
–cpu-quota 指定在一个周期内,cpu最多可以有多少时间用来跑这个容器
–cpu-period 指定容器对CPU的使用要在多长时间内做一次重新分配
- 云平台(共享存储)
被测数据库为普通环境在咸阳应用,Mysql5.7(压测)
数据库容器ip: 192.168.142.126
数据库密码 : ****
运行宿主机:10.63.4.64
- 云平台(本地存储)
被测数据库为普通环境在咸阳应用,Mysql5.7(本地存储)
数据库容器ip: 192.168.142.74
数据库密码 : ****
运行宿主机:10.63.4.64
- 阿里云
部署机器信息:
被测机:121.40.191.216
密码:gr123465!
数据库端口:3306
数据库密码:****
运行数据库:
docker run --name test-mysql -m 8192m --cpu-shares=1966 --cpu-quota 478000 --cpu-period 100000 -p 3308:3306 -e MYSQL_ROOT_PASSWORD=**** -v /var/lib/test-mysql:/var/lib/mysql -e --character-set-server=utf8mb4 -e MYSQL_DATABASE=systest -d mysql:5.7
测试过程
为保证测试结果公平,测试前请在测试机先清理数据
#刷新脏数据到磁盘
sync
#清除cache
echo 3 >/proc/sys/vm/drop_caches
#释放swap
swapoff -a && swapon -a
物理机
- 测试机信息
测试机IP:10.63.4.57
密码:****
- 准备
sysbench /root/sysbench-1.0/src/lua/oltp_insert.lua --tables=10 --table_size=2000000 --mysql-user=root --mysql-password=**** --mysql-host=10.63.4.59 --mysql-port=3308 --mysql-db=systest --threads=100 --report-interval=5 --time=100 prepare
- 运行
插入
sysbench /root/sysbench-1.0/src/lua/oltp_insert.lua --tables=10 --table_size=2000000 --mysql-user=root --mysql-password=**** --mysql-host=10.63.4.59 --mysql-port=3308 --mysql-db=systest --threads=100 --time=100 --report-interval=5 run
查询
sysbench /root/sysbench-1.0/tests/include/oltp_legacy/select.lua --tables=10 --table_size=2000000 --mysql-user=root --mysql-password=**** --mysql-host=10.63.4.59 --mysql-port=3308 --mysql-db=systest --threads=100 --time=100 --report-interval=5 run
删除
sysbench /root/sysbench-1.0/tests/include/oltp_legacy/delete.lua --tables=10 --table_size=2000000 --mysql-user=root --mysql-password=**** --mysql-host=10.63.4.59 --mysql-port=3308 --mysql-db=systest --threads=100 --time=100 --report-interval=5 run
读写混合
sysbench /root/sysbench-1.0/src/lua/oltp_read_write.lua --tables=10 --table_size=2000000 --mysql-user=root --mysql-password=**** --mysql-host=10.63.4.59 --mysql-port=3308 --mysql-db=systest --threads=100 --time=100 --report-interval=5 run
- 清理
sysbench /root/sysbench-1.0/src/lua/oltp_insert.lua --tables=10 --table_size=2000000 --mysql-user=root --mysql-password=**** --mysql-host=10.63.4.59 --mysql-port=3308 --mysql-db=systest --threads=100 --report-interval=5 --time=100 cleanup
云平台(共享存储)
- 测试机信息
测试机IP:10.63.4.57
密码:****
- 准备
sysbench /root/sysbench-1.0/src/lua/oltp_insert.lua --tables=10 --table_size=2000000 --mysql-user=root --mysql-password=**** --mysql-host=192.168.142.126 --mysql-port=3306 --mysql-db=systest --threads=100 --report-interval=5 --time=100 prepare
- 运行
插入
sysbench /root/sysbench-1.0/src/lua/oltp_insert.lua --tables=10 --table_size=2000000 --mysql-user=root --mysql-password=**** --mysql-host=192.168.142.126 --mysql-port=3306 --mysql-db=systest --threads=100 --time=100 --report-interval=5 run
查询
sysbench /root/sysbench-1.0/tests/include/oltp_legacy/select.lua --tables=10 --table_size=2000000 --mysql-user=root --mysql-password=**** --mysql-host=192.168.142.126 --mysql-port=3306 --mysql-db=systest --threads=100 --time=100 --report-interval=5 run
删除
sysbench /root/sysbench-1.0/tests/include/oltp_legacy/delete.lua --tables=10 --table_size=2000000 --mysql-user=root --mysql-password=**** --mysql-host=192.168.142.126 --mysql-port=3306 --mysql-db=systest --threads=100 --time=100 --report-interval=5 run
读写混合
sysbench /root/sysbench-1.0/src/lua/oltp_read_write.lua --tables=10 --table_size=2000000 --mysql-user=root --mysql-password=**** --mysql-host=192.168.142.83 --mysql-port=3306 --mysql-db=systest --threads=100 --time=100 --report-interval=5 run
- 清理
sysbench /root/sysbench-1.0/src/lua/oltp_insert.lua --tables=10 --table_size=2000000 --mysql-user=root --mysql-password=**** --mysql-host=192.168.142.83 --mysql-port=3306 --mysql-db=systest --threads=100 --report-interval=5 --time=100 cleanup
云平台(本地存储)
- 测试机信息
测试机IP:10.63.4.57
密码:wlsj0501!
- 准备
sysbench /root/sysbench-1.0/src/lua/oltp_insert.lua --tables=10 --table_size=2000000 --mysql-user=root --mysql-password=**** --mysql-host=192.168.142.74 --mysql-port=3306 --mysql-db=systest --threads=100 --report-interval=5 --time=100 prepare
- 运行
插入
sysbench /root/sysbench-1.0/src/lua/oltp_insert.lua --tables=10 --table_size=2000000 --mysql-user=root --mysql-password=**** --mysql-host=192.168.142.74 --mysql-port=3306 --mysql-db=systest --threads=100 --time=100 --report-interval=5 run
查询
sysbench /root/sysbench-1.0/tests/include/oltp_legacy/select.lua --tables=10 --table_size=2000000 --mysql-user=root --mysql-password=**** --mysql-host=192.168.142.74 --mysql-port=3306 --mysql-db=systest --threads=100 --time=100 --report-interval=5 run
删除
sysbench /root/sysbench-1.0/tests/include/oltp_legacy/delete.lua --tables=10 --table_size=2000000 --mysql-user=root --mysql-password=**** --mysql-host=192.168.142.74 --mysql-port=3306 --mysql-db=systest --threads=100 --time=100 --report-interval=5 run
读写混合
sysbench /root/sysbench-1.0/src/lua/oltp_read_write.lua --tables=10 --table_size=2000000 --mysql-user=root --mysql-password=**** --mysql-host=192.168.142.74 --mysql-port=3306 --mysql-db=systest --threads=100 --time=100 --report-interval=5 run
- 清理
sysbench /root/sysbench-1.0/src/lua/oltp_insert.lua --tables=10 --table_size=2000000 --mysql-user=root --mysql-password=**** --mysql-host=192.168.142.74 --mysql-port=3306 --mysql-db=systest --threads=100 --report-interval=5 --time=100 cleanup
阿里云
- 测试机信息
测试机IP:121.41.106.66
密码:****
- 准备
sysbench /usr/share/sysbench/oltp_insert.lua --tables=10 --table_size=2000000 --mysql-user=root --mysql-password=**** --mysql-host=10.11.1.160 --mysql-port=3306 --mysql-db=systest --threads=100 --report-interval=5 --time=100 prepare
- 运行
插入
sysbench /usr/share/sysbench/oltp_insert.lua --tables=10 --table_size=2000000 --mysql-user=root --mysql-password=**** --mysql-host=10.11.1.160 --mysql-port=3306 --mysql-db=systest --threads=100 --time=100 --report-interval=5 run
查询
sysbench /usr/share/sysbench/tests/include/oltp_legacy/select.lua --tables=10 --table_size=2000000 --mysql-user=root --mysql-password=**** --mysql-host=10.11.1.160 --mysql-port=3306 --mysql-db=systest --threads=100 --time=100 --report-interval=5 run
删除
sysbench /usr/share/sysbench/tests/include/oltp_legacy/delete.lua --tables=10 --table_size=2000000 --mysql-user=root --mysql-password=**** --mysql-host=10.11.1.160 --mysql-port=3306 --mysql-db=systest --threads=100 --time=100 --report-interval=5 run
读写混合
sysbench /usr/share/sysbench/oltp_read_write.lua --tables=10 --table_size=2000000 --mysql-user=root --mysql-password=**** --mysql-host=10.11.1.160 --mysql-port=3306 --mysql-db=systest --threads=100 --time=100 --report-interval=5 run
- 清理
sysbench /usr/share/sysbench/oltp_insert.lua --tables=10 --table_size=2000000 --mysql-user=root --mysql-password=**** --mysql-host=10.11.1.160 --mysql-port=3306 --mysql-db=systest --threads=100 --report-interval=5 --time=100 cleanup
测试结果
测试环境 | 测试内容 | 每秒查询数 (QPS) | 每秒事务数(TPS) | 平均耗时(ms) | 95%以上语句响应时间(ms) |
---|---|---|---|---|---|
物理机 | 10张表,执行insert语句,分别向每张表插入数据200万。 | 4197.49 | 4197.49 | 23.81 | 87.56 |
云平台(共享存储) | 10张表,执行insert语句,分别向每张表插入数据200万。 | 137.64 | 137.64 | 724.32 | 2449.36 |
云平台(本地存储) | 10张表,执行insert语句,分别向每张表插入数据200万。 | 3609.99 | 3609.99 | 7.69 | 90.78 |
阿里云 | 10张表,执行insert语句,分别向每张表插入数据200万。 | 14724.55 | 14724.55 | 6.79 | 20.74 |
物理机 | 执行select语句,分别从10张表中查询数据。 | 25552.21 | 25552.21 | 3.91 | 1.73 |
云平台(共享存储) | 执行select语句,分别从10张表中查询数据。 | 22851.12 | 22851.12 | 4.37 | 2.71 |
云平台(本地存储) | 执行select语句,分别从10张表中查询数据。 | 23886.23 | 23886.23 | 4.18 | 2.35 |
阿里云 | 执行select语句,分别从10张表中查询数据。 | 49049.69 | 49049.69 | 2.04 | 3.43 |
物理机 | 执行delete语句,分别从10张表中删除数据。 | 14603.18 | 14603.18 | 6.84 | 86.00 |
云平台(共享存储) | 执行delete语句,分别从10张表中删除数据。 | 11944.01 | 11944.01 | 8.37 | 82.69 |
云平台(本地存储) | 执行delete语句,分别从10张表中删除数据。 | 13275.33 | 13275.33 | 7.53 | 81.48 |
阿里云 | 执行delete语句,分别从10张表中删除数据。 | 45520.04 | 45520.04 | 2.20 | 3.43 |
物理机 | 读写混合测试 | 7807.77 | 390.39 | 255.92 | 484.44 |
云平台(共享存储) | 读写混合测试 | 657.50 | 37.43 | 4667.79 | 8795.93 |
云平台(本地存储) | 读写混合测试 | 5036.15 | 251.81 | 396.89 | 831.46 |
阿里云 | 读写混合测试 | 24964.83 | 1248.24 | 80.09 | 173.58 |
**