MySQL压测实战

news2025/1/16 19:55:38

写作目的

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

服务器配置

配置参数
CPU2核
内存4G
MySQL5.7
Linux7.5

MySQL安装

docker安装

docker run --name mysql-6-20220702 -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456  mysql:5.7

MySQL压测实践

压测工具的安装sysbench

执行 下载命令

curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bash

安装

sudo yum -y install sysbench

查看版本

sysbench --version

构造测试表和数据

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秒,同时读写操作

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/s95%的请求的延迟都在 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有明显波动时停止

线程数QPSTPSRT(95%)
103813191170ms
203506175215ms
304312215272ms
403802190427ms
5033861691304ms

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

参考

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/678519.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL数据库操作篇2(表的增删查改约束)

在数据类型那篇文章里,笔者曾经提到过约束条件,但也只是简单的提了提,并没有展开来说,约束条件是MySQL为确保数据正确性,安全性,以及倒逼程序员规范操作的一大利器,这篇文章笔者详细谈谈有哪些约…

0019-TIPS-2019-tokyowesterns-gnote : switch(jump) Doubule Fetch

漏洞源码 #include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h> #include <linux/fs.h> #include <linux/proc_fs.h> #include <linux/string.h> #include <linux/slab.h> #include <asm/uaccess.h>…

chatgpt赋能python:Python绘制车辆轨迹图

Python绘制车辆轨迹图 在现代交通中&#xff0c;车辆轨迹图是一个广泛应用的技术&#xff0c;它可以被用于道路交通管理&#xff0c;行车安全评估等领域。Python是一种强大的编程语言&#xff0c;它提供了许多绘制数据可视化图表的库。本文将介绍如何使用Python和Matplotlib库…

10.事务消息

4.6 事务消息 4.6.1 流程分析 上图说明了事务消息的大致方案&#xff0c;其中分为两个流程&#xff1a;正常事务消息的发送及提交、事务消息的补偿流程。 1)事务消息发送及提交 (1) 发送消息(half消息)。 (2) 服务端响应消息写入结果。 (3) 根据发送结果执行本地事务(如果写入失…

Golang -> Go 语言快速开发入门

Go 语言快速开发入门 开发一个 hello.go 程序Golang 执行流程分析两种执行流程的方式区别:编译和运行说明 Go 程序开发的注意事项注释行注释多行注释 开发一个 hello.go 程序 package mainimport "fmt"func main() {fmt.Print("hello") }输出: hello对上图…

Cesium 入门

文章目录 一、了解 Cesium二、创建第一个 Cesium 地球三、案例1. Cesium 查看器、场景、实体、数据源介绍2. Cesium 的坐标与转换3. Cesium 相机系统方法一&#xff1a;setView方法二&#xff1a;flyTo方法三&#xff1a;lookAt方法四&#xff1a; viewBoundingSphere 四、案例…

【Leetcode60天带刷】day27回溯算法——39. 组合总和,40.组合总和II,131.分割回文串

​ 题目&#xff1a; 39. 组合总和 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一…

Redis 实战:逐步指南,让你轻松在 Linux 上安装与部署

目录 前言为什么会出现 Redis&#xff1f;磁盘、内存数据库缓存中间件 安装Redis5Redis6 使用总结 前言 Redis 中文网站&#xff1a;http://redis.cn/ Redis 是一个开源&#xff08;BSD 许可&#xff09;的&#xff0c;内存中的数据结构存储系统&#xff0c;它可以用作数据库…

【编译、链接、装载十二】动态链接2

【编译、链接、装载十二】动态链接2 四、延迟绑定&#xff08;PLT&#xff09;五、动态链接相关结构1 “.interp”段2 “.dynamic”段3 .动态符号表——dynsym、动态符号字符串表——.dynstr4、动态链接重定位表 六、动态链接的步骤和实现1、动态链接器自举2、装载共享对象3、重…

2.10 高性能异步IO机制:io_uring

一、io_uring的引入 为了方便说明io_uring的作用&#xff0c;先举一个通俗点的例子 1、通过异步提高读写的效率 假设有一批数量很大的货&#xff0c;需要分批次运到厂里处理。这个时候就有两种方式&#xff1a; 1&#xff09;同步方式&#xff1a;运送一批到厂里&#xff0c…

TypeScript ~ TS 掌握编译文件配置项 ④

作者 : SYFStrive 博客首页 : HomePage &#x1f4dc;&#xff1a; TypeScript ~ TS &#x1f4cc;&#xff1a;个人社区&#xff08;欢迎大佬们加入&#xff09; &#x1f449;&#xff1a;社区链接&#x1f517; &#x1f4cc;&#xff1a;觉得文章不错可以点点关注 &…

初识EasyX图形库

EasyX图形库 1. EasyX是什么&#xff1f;2. 入手EasyX3. EasyX函数介绍创建和关闭绘图窗口操作initgraphclosegraph 设置绘图背景setbkcolorcleardevice 画图形circlefillcirclerectanglefillrectangle 图形颜色及样式设置setfillcolorsetlinecolorsetbkcolorsetbkmodesetlines…

计算物理专题:有限差分法解决本征值问题

计算物理专题&#xff1a;有限差分法解决本征值问题 定态薛定谔方程差分形式 一维定态薛定谔方程 谐振子 解法代码 import numpy as np def householder(symmetric_matrix):M symmetric_matrixassert np.allclose(M,M.T),"matrix is not symmetric"N len(M)for …

chatgpt赋能python:用Python分析电影评分数据

用Python分析电影评分数据 Python是一种流行的数据分析和可视化工具&#xff0c;它可以让我们更深入地了解电影的评分数据。在本文中&#xff0c;我们将使用Python来分析一些电影评分数据&#xff0c;并试图找出一些有趣的模式和趋势。 数据来源 我们将使用公共数据集IMDb电…

第4章 网络层

1‌、下列关于路由算法描述错误的是&#xff08; &#xff09; A. 链路状态算法是一种全局路由算法&#xff0c;每个路由器需要维护全局状态信息B. OSPF 是一种域内路由协议&#xff0c;核心是基于 Dijkstra 最低费用路径算法C. RIP 是一种域内路由算法&#xff0c;核心是基…

采用SqlSugar的DBFirst相关功能创建数据库表对应的实体类

.NET Core官方教程中推荐使用的EF Core数据库ORM框架虽然能用&#xff0c;但是用起来并不是太方便&#xff08;或者是不习惯&#xff0c;之前用的最多的还是linq&#xff09;。之前下载的开源博客项目中使用的SqlSugar&#xff0c;后者是由果糖大数据科技团队维护和更新 &#…

基于WebAssembly构建Web端音视频通话引擎

Web技术在发展&#xff0c;音视频通话需求在演进&#xff0c;怎么去实现新的Web技术点在实际应用中的值&#xff0c;以及给我们带来更大的收益是需要我们去探索和实践的。LiveVideoStackCon 2022北京站邀请到田建华为我们从实践中来介绍WebAssembly、WebCodecs、WebTransport等…

【裸机开发】IRQ 中断服务函数(一) —— 汇编初始化

IRQ 和前面的Reset 函数不大一样&#xff0c;当一个IRQ中断产生时&#xff0c;我们也不知道这个IRQ中断来自哪个外设&#xff0c;因此&#xff0c;需要先获取到中断ID&#xff0c;随后才会跳转到真正的中断服务函数执行处理逻辑。 整个 IRQ 中断处理可以看做是包含了两个部分&…

MySQL 自增主键一定是连续的吗?

众所周知&#xff0c;自增主键可以让聚集索引尽量地保持递增顺序插入&#xff0c;避免了随机查询&#xff0c;从而提高了查询效率 但实际上&#xff0c;MySQL 的自增主键并不能保证一定是连续递增的。 下面举个例子来看下&#xff0c;如下所示创建一张表&#xff1a; 自增值保…

ORCA优化器浅析——GP数据库调用优化器流程

首先我们需要看CGPOptimizer类(src/include/gpopt/CGPOptimizer.h)为Greenplum数据库提供ORCA优化器export出来的函数的封装。Greenplum数据库主流程调用extern "C"中提供的函数&#xff0c;比如初始化ORCA优化器的函数InitGPOPT&#xff0c;优化查询树的函数GPOPTOp…