增加并发数后,TPS增加, IOPS却下降现象分析

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 增加并发数后,TPS增加, IOPS却下降现象分析

简介: 近期遇到一个问题,用户这边反馈实例压测tps和qps相加结果是要比iops最大值要大

问题复现分析:


环境准备


Ecs规格:ecs.g6. xlarge(4C16G)

centos7.6

数据库规格:rds.mysql.s3.large(4C8G)

mysql 5.7


参数配置

o   sync_binlog=1innodb_flush_log_at_trx_commit=1:确保每次提交的数据完整写入磁盘中。


o   rpl_semi_sync_master_enabled=ON:开启数据库半同步模式,保证主备库数据的一致性。


o   Performance_schema=ON:内存大于等于8 GB的实例规格默认开启Performance Schema


测试工具SysBench 1.0.20


安装测试工具


ECS实例执行如下命令安装SysBench

yum install gcc gcc-c++ autoconf automake make libtool bzr mysql-devel git mysql

git clonehttps://github.com/akopytov/sysbench.git

##Git中下载SysBench

cd sysbench

##打开SysBench目录

git checkout 1.0.20

##切换到SysBench 1.0.20版本

./autogen.sh

##运行autogen.sh

./configure --prefix=/usr --mandir=/usr/share/man

make

##编译

make install


1,构建数据


数据量:80*100000

sysbench --db-driver=mysql --mysql-host=rm-bp15ffqrv1s4d63bq.mysql.rds.aliyuncs.com --mysql-port=3306 --mysql-user=zt --mysql-password=Aliyun2021 --mysql-db=wjk --table_size=100000 --tables=80 --events=0 --time=120  oltp_read_write prepare


2、压测并发4个线程

TPS 500

IOPS 4000


3、压测并发8个线程

Tps 1100

Iops 3800


4、压测 并发80个线程

Tps 2100

Iops 860


5、压测 并发600个线程

Tps 2100

Iops 350


6、分析原因

设置了innodb_flush_log_at_trx_commit =1, 也就是每次事务提交前都要刷盘, 每次刷盘是把整个innodb_log_buffer都写入redo里面(包括其它事务), 所以并发增加后, 每次刷盘所包含的事务也就更多了(total次数减少), 数据量也大了(avg_written增大). 宏观来看就是写iops减少了. 那是不是并发越多性能越好呢, 肯定不是, 本次实验600并发的时候TPS已经开始降下来了, 连接本身占用的资源就多, 应该是个正态分布.

7、结论

并发数越多, IO利用率越高(iops越低). 主要是redo log的原因.

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
Rust 算法 安全
【密码学】一文读懂MurMurHash2
上次我们聊过了一代的MurMurHash算法,是的,我又来水文章了,今天呢,接着来聊一下二代的MurMurHash算法,二代算法的整体结构实际上和一代算法差不太多,只是对于每一轮数据的处理过程当中的运算有一些差异,算法的来源依然是来自于Google官网给提供的源码,对着源码看的结构,对于这个算法呢,有两个版本,一个是32位的,一个是64位的,对于32位的算法和64位的算法,区别在于两个初始的魔数不同,整体运算过程还是十分相似的。
2615 0
【密码学】一文读懂MurMurHash2
|
6月前
|
存储 算法 安全
G1原理—2.G1是如何提升分配对象效率
本文深入探讨了G1垃圾回收器中对象分配的原理与机制,包括TLAB(线程本地分配缓冲)的作用、快速分配与慢速分配的区别及流程。首先分析了G1的对象分配原理,强调了停顿预测模型和无锁化分配的重要性。接着详细解析了TLAB机制,涵盖其大小确定、满时处理以及如何借助指针碰撞法实现高效分配。同时讨论了大对象分配的特点及其与普通对象分配的不同之处。最后,针对慢速分配失败的情况,介绍了G1如何通过FGC(Full GC)进行最终尝试,确保系统在极端情况下的稳定运行。整体内容围绕提升分配效率与减少GC压力展开,为理解G1的工作机制提供了全面视角。
G1原理—2.G1是如何提升分配对象效率
|
存储 弹性计算 固态存储
三分钟磁盘存储性能IOPS、I/O及吞吐量指标详解
什么是磁盘I/O?存储IOPS是什么?磁盘性能指标吞吐量是指什么?
17384 39
|
Kubernetes Cloud Native 网络协议
Kubernetes 高可用性与灾难恢复方案
【8月更文第29天】随着业务的不断增长,保持应用程序的高可用性和灾难恢复能力变得越来越重要。Kubernetes 作为现代云原生应用的主要平台,提供了丰富的工具和方法来保证应用的高可用性以及快速恢复的能力。本文将详细介绍如何利用 Kubernetes 的功能来构建高可用性的系统,并实施有效的灾难恢复策略。
512 2
|
JSON 中间件 数据格式
解决scrapy设置cookie中间件时遇到的问题
解释COOKIES_ENABLED作用: * 当COOKIES_ENABLED是注释的时候scrapy默认没有开启cookie * 当COOKIES_ENABLED没有注释设置为False的时候scrapy默认使用了settings里面的cookie * 当COOKIES_ENABLED设置为True的时候scrapy就会把settings的cookie关掉,使用自定义cookie
503 79
|
人工智能 前端开发 Serverless
阿里云百炼应用实践系列-AI助手快速搭建
本文主要介绍如何基于阿里云百炼平台快速在10分钟为您的网站添加一个 AI 助手。我们基于阿里云百炼平台的能力,以官方帮助文档为参考,搭建了一个以便全天候(7x24)回应客户咨询的AI助手,介绍了相关技术方案和主要代码,供开发者参考。
1821 15
阿里云百炼应用实践系列-AI助手快速搭建
|
11月前
|
存储 应用服务中间件 开发工具
docker镜像上传至Harbor及从Harbor下载
docker镜像上传至Harbor及从Harbor下载
|
Kubernetes 安全 Go
对于阿里开源混沌工程工具chaosblade-box-agent心跳报错问题的分析与解决
摘要: 本文记录了一个由chaosblade-box平台后台发现的偶发的chaosblade-box-agent不发送心跳的问题,从报错日志入手,结合chaosblade-box-agent源码进行分析,最终解决问题并修复打包的过程。
662 7
|
存储 监控 安全
安全规范问题之跟数据库交互涉及的敏感数据操作需要有哪些措施
安全规范问题之跟数据库交互涉及的敏感数据操作需要有哪些措施
|
消息中间件 并行计算 网络协议
探秘高效Linux C/C++项目架构:让进程、线程和通信方式助力你的代码飞跃
探秘高效Linux C/C++项目架构:让进程、线程和通信方式助力你的代码飞跃
269 0