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

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

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

问题复现分析:


环境准备:


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

centos7.6

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

mysql 5.7


参数配置:

o   sync_binlog=1、innodb_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 
相关文章
|
测试技术 C# 容器
深入理解WPF中的依赖注入和控制反转
在WPF开发中,依赖注入(Dependency Injection)和控制反转(Inversion of Control)是程序解耦的关键,在当今软件工程中占有举足轻重的地位,两者之间有着密不可分的联系。今天就以一个简单的小例子,简述如何在WPF中实现依赖注入和控制反转,仅供学习分享使用,如有不足之处,还请指正。
651 0
|
Kubernetes 安全 Linux
【阿里云镜像】使用阿里巴巴开源镜像站镜像——Kubernetes 镜像
Kubernetes 是一个开源系统,用于容器化应用的自动部署、扩缩和管理。它将构成应用的容器按逻辑单位进行分组以便于管理和发现。
4137 0
【阿里云镜像】使用阿里巴巴开源镜像站镜像——Kubernetes 镜像
|
资源调度 前端开发 JavaScript
qs库--介绍
qs库--介绍
1011 0
|
Ubuntu 安全 Unix
使用LPD协议来共享打印机
【10月更文挑战第9天】LPD(Line Printer Daemon)协议用于在网络环境中共享打印机,广泛应用于Unix和类Unix系统。打印服务器监听特定端口(如515),接收并处理客户端的打印请求,维护打印队列。客户端需安装相应软件,通过特定格式请求提交打印任务。设置包括安装驱动、配置服务、启动服务及客户端连接配置。LPD协议跨平台性强、配置简单,但安全性较弱,功能有限。
4295 67
|
移动开发 前端开发 JavaScript
从入门到精通:H5游戏源码开发技术全解析与未来趋势洞察
H5游戏凭借其跨平台、易传播和开发成本低的优势,近年来发展迅猛。接下来,让我们深入了解 H5 游戏源码开发的技术教程以及未来的发展趋势。
|
机器学习/深度学习 数据采集 算法
Python基于OpenCV和卷积神经网络CNN进行车牌号码识别项目实战
Python基于OpenCV和卷积神经网络CNN进行车牌号码识别项目实战
|
JavaScript Linux 编译器
c++开源协程库libgo介绍及使用
c++开源协程库libgo介绍及使用
|
安全 应用服务中间件 网络安全
检查一个网站是否启用了HTTPS
检查一个网站是否启用了HTTPS
4182 6
|
弹性计算 Java 应用服务中间件