前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL压测实战

MySQL压测实战

作者头像
CBeann
发布2023-12-25 19:51:26
1820
发布2023-12-25 19:51:26
举报
文章被收录于专栏:CBeann的博客CBeann的博客

写作目的

最近看到一句话是MySQL的TPS是4000,这句话是不严谨的,因为没有说服务器的配置。所以自己买了个服务器做了一个压测。希望自己对数据有一个概念。 注意:服务器不同结果不同,结果不具有普适性

服务器配置

配置

参数

CPU

2核

内存

4G

MySQL

5.7

Linux

7.5

MySQL安装

1)docker安装

2)docker安装MySQL

代码语言:javascript
复制
docker run --name mysql-6-20220702 -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456  mysql:5.7

MySQL压测实践

压测工具的安装sysbench

执行 下载命令

代码语言:javascript
复制
curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bash

安装

代码语言:javascript
复制
sudo yum -y install sysbench

查看版本

代码语言:javascript
复制
sysbench --version

构造测试表和数据

代码语言:javascript
复制
sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root --mysql-password=123456 --mysql-db=test_db --tables=20 --table_size=1000000 oltp_read_write --db-ps-mode=disable prepare

参数

含义

–db-driver=mysql

这个很简单,就是说他基于mysql的驱动去连接mysql数据库,你要是oracle,或者sqlserver,那自然就是其他的数据库的驱动了

–time=300

这个就是说连续访问300秒

–threads=10

这个就是说用10个线程模拟并发访问

–report-interval=1

这个就是说每隔1秒输出一下压测情况

–mysql-host=127.0.0.1

这是你要连接的sql服务连接

–db-driver=mysql

这个很简单,就是说他基于mysql的驱动去连接mysql数据库,你要是oracle,或者sqlserver,那自然就是其他的数据库的驱动了

–mysql-port=3306

数据端口

–mysql-user=test_user

数据库用户名

–mysql-password=test_user

数据库密码

–mysql-db=test_db

哪个数据库进行压测,需要手动创建库

–tables=20

压测数据库创建多少张表

–table_size=1000000

压测数据库每张表插入多少数据

oltp_read_write

执行oltp数据库的读写测试

–db-ps-mode=disable

禁止ps模式(不知道干嘛的)

prepare

参照这个命令的设置去构造出来我们需要的数据库里的数据,他会自动创建20个测试表,每个表里创建100万条测试数据

执行上面命令完毕后数据库中会有这样的命令

在这里插入图片描述
在这里插入图片描述

压测结果解读DEMO

从10个线程开始压,压10秒,同时读写操作

代码语言:javascript
复制
sysbench --db-driver=mysql --time=10 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root --mysql-password=123456 --mysql-db=test_db --tables=20 --table_size=1000000 oltp_read_write --db-ps-mode=disable run
在这里插入图片描述
在这里插入图片描述

[ 1s ] thds: 10 tps: 131.73 qps: 2668.44 (r/w/o: 1868.11/526.90/273.43) lat (ms,95%): 99.33 err/s: 0.00 reconn/s: 0.00

参数

含义

thds: 10

有10个线程在压测

tps: 131.73

每秒执行了131.73个事务

qps: 2668.44

每秒可以执行2668.44个请求

(r/w/o: 1868.11/526.90/273.43)

在每秒2668.44个请求中,有1868.11个请求是读请求,526.90个请求是写请求,273.43个请求是其他的请求,就是对QPS进行了拆解l

at (ms,95%): 99.33 err/s

95%的请求的延迟都在 99.33毫秒以下

0.00 reconn/s: 0.00

,每秒有0个请求是失败的,发生了0次网络重连

SQL statistics:   queries performed:     read: 11438// 这就是说在10s的压测期间执行了11438次的读请求     write: 3268// 这是说在压测期间执行了3268次的写请求     other: 1634// 这是说在压测期间执行了1634次的其他请求     total: 16340// 这是说一共执行了16340次的请求   transactions: 817( 75.2 per sec. ) // 这是说一共执行了817个事务,每秒执行75.2个事务   queries: 16340( 1503.92 per sec. )// 这是说一共执行了16340次的请求,每秒执行1503.92 请求   ignored errors: 0 (0.00 per sec.)   reconnects: 0 (0.00 per sec.)

General staticstics:   total time: 10.0052s //一共执行了10s的压测   total number of events: 817 //一共执行了817个事务

Latency (ms):   min: 13.21 // 请求中延迟最小的是13.21 ms   avg: 132.31 // 所有请求平均延迟是132.31 ms   max: 4675.90 // 延迟最大的请求是4675.90 ms   95th percentile: 287.38 // 95%的请求延迟都在287ms以内   sum: 108097.91 //总共耗时108097.91 ms

增压结果对比

从10个线程发压,一直看到QPS和RT有明显波动时停止

线程数

QPS

TPS

RT(95%)

10

3813

191

170ms

20

3506

175

215ms

30

4312

215

272ms

40

3802

190

427ms

50

3386

169

1304ms

从上面表格中可以看出,在我这个服务器2核4G内存下MySQL的QPS峰值是4300,TPS为215,RT为300ms。

参考

linux 安装 sysbench 和 使用 ☆☆☆☆☆sysbench-多线程性能测试工具(压测MySQL)

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-06-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 写作目的
  • 服务器配置
  • MySQL安装
  • MySQL压测实践
    • 压测工具的安装sysbench
      • 构造测试表和数据
        • 压测结果解读DEMO
          • 增压结果对比
          • 参考
          相关产品与服务
          云数据库 MySQL
          腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档