最近看到一个网友在问(请问一下,每天3~4W次的读写,用什么样子的配置比较好,麻烦推荐一个配置,谢谢 MySQL5.7的.)看着应该是一个比较简单的场景,不过笔者通过这问题在想云MySQL不同的配置他的性能究竟如何?如果推荐了这个用户配置后,他的业务又涨了该如何再选择其他的配置? 所以这里我们可以来测试一下云MySQL的性能,从测试数据上看是否可以更好的解答此用户的问题。
本文内容提供了B站视频:https://www.bilibili.com/video/BV1vt4y1U71S
我们使用《高性能MySQL》第二章推荐的工具sysbench(http://sysbench.sourceforge.net)这是一款开源的多线程系统基准测试工具,可以用于测试CPU、内存、磁盘I/O线程和数据库的性能,目前数据库支持MySQL、Oracle和PostgreSQL等常见的数据库。
本文主要介绍以下两个话题:
1.腾讯云MySQL性能测试结果
2.sysbench安装与使用介绍
腾讯云MySQL性能测试结果
以下笔者测试了腾讯云MySQL5.7版本的不同配置服务器对应的指标。为了简化介绍用户场景这里笔者将不同的规格分为三个等级分别为初级、中级和高级(笔者个人的定义),可以看到初级的配置基本可以满足网友的需求,如果用户后续业务增长也可以按照以下做参考。
数据库最有价值的指标TPS,什么是TPS如下。
TPS(Transactions Per Second)每秒事务数。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数。
TPS计算方式
QPS(Queries Per Second)每秒查询。是一台服务器每秒能够响应的查询次数,是对一个特定的查询服务器(比如是读写分离的架构,就是读的服务器)在规定时间内所处理流量多少的衡量标准。
以上测试过程中的参数见在线表格,表格在不断更新完善中。(数据库性能测试(腾讯云 ))https://docs.qq.com/sheet/DTmNWZWdzdFJJWERR?tab=nw95wo&c=O10A0C0
sysbench安装与使用介绍
我们继续来看一下sysbench如何安装,sysbench不同的版本一些细节参数是有一些区别的,这里我们使用的是sysbench 1.1.0-bd4b418版本以下为安装步骤:
# yum -y install git
# git clone https://github.com/akopytov/sysbench.git
# yum -y install make automake libtool pkgconfig libaio-devel
# yum -y install mariadb-devel
# ./autogen.sh
# ./configure
# make -j
# make install
源码目录中提供了lua脚本,各脚本功能如下,关于lua脚本内容介绍见(https://blog.csdn.net/L835311324/article/details/98618821)
测试方法
sysbench 测试分为三步,分别(prepare -> run -> cleanup):
1.准备数据 (prepare)
sysbench ./oltp_read_write.lua --mysql-host= --mysql-port=3306 --mysql-user=root --mysql-password='密码' --mysql-db=test --tables=4 --table-size=100000 --threads=128 prepare
2.测试数据(run)
sysbench ./oltp_read_write.lua --mysql-host=IP --mysql-port= --mysql-user=root --mysql-password='密码' --mysql-db=test --tables=4 --table-size=100000 --threads=128 --report-interval=3 --time=60 run
3.清理测试数据(cleanup)
sysbench ./oltp_read_write.lua --mysql-host=IP--mysql-port=3306 --mysql-user=root --mysql-password='密码' --mysql-db=test --tables=4 --table-size=100000 --threads=128 cleanup
参数介绍:
--mysql-host= MySQL服务器IP
--mysql-port= 端口
--mysql-user= 账户名
--mysql-password= 密码
--mysql-db= 数据库名
--tables=表数
--table-size= 表行数
--threads= 进程数
--time = 限制测试时长(秒)
以下是测试数据后的结果
Initializing worker threads...
Threads started!
[ 3s ] thds: 128 tps: 369.44 qps: 7947.23 (r/w/o: 5629.62/1538.08/779.53) lat (ms,95%): 502.20 err/s: 0.00 reconn/s: 0.00
[ 6s ] thds: 128 tps: 414.71 qps: 8288.14 (r/w/o: 5823.90/1633.49/830.75) lat (ms,95%): 590.56 err/s: 0.33 reconn/s: 0.00
[ 9s ] thds: 128 tps: 451.33 qps: 9002.31 (r/w/o: 6300.32/1798.33/903.66) lat (ms,95%): 404.61 err/s: 0.67 reconn/s: 0.00
SQL statistics:
queries performed:
read: 59108 # 读
write: 16879 # 写
other: 8441 #其他操作总数(SELECT、INSERT、UPDATE、DELETE之外的操作,例如COMMIT等)
total: 84428 . #全部总数
transactions: 4219 (414.71 per sec.) . # tps 总事务数(每秒事务数)
queries: 84428 (8299.00 per sec.) . # QPS(每秒读写次数)
ignored errors: 3 (0.29 per sec.)
reconnects: 0 (0.00 per sec.)
Throughput:
events/s (eps): 414.7143
time elapsed: 10.1733s
total number of events: 4219
Latency (ms):
min: 36.82
avg: 305.95
max: 809.03
95th percentile: 493.24 . # 超过95%平均耗时
sum: 1290817.07
Threads fairness:
events (avg/stddev): 32.9609/2.49
execution time (avg/stddev): 10.0845/0.03
End...
更多参考
1. sysbench参数和一些测试案例 https://blog.csdn.net/weixin_44218035/article/details/89424166
2. 什么是TPS,什么是QPS 他们区别是什么 。https://www.cnblogs.com/uncleyong/p/11059556.html
3. 《高性能MySQL》第二章