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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 增加并发数后,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的原因.

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
并行计算 前端开发 JavaScript
【修正版】QPS、TPS、RT、并发数、吞吐量理解和性能优化深入思考
在了解qps、tps、rt、并发数之前,首先我们应该明确一个系统的吞吐量到底代表什么含义,一般来说,系统吞吐量指的是系统的抗压、负载能力,代表一个系统每秒钟能承受的最大用户访问量。
4747 1
【修正版】QPS、TPS、RT、并发数、吞吐量理解和性能优化深入思考
|
6月前
|
测试技术
TPS、QPS和系统吞吐量的区别和理解
TPS、QPS和系统吞吐量的区别和理解
837 0
|
Java 测试技术 BI
一文告诉你CPU分支预测对性能影响有多大
CPU分支预测本身是为了提升流水线下避免流水线等待的手段,其实本质上是利用了局部性原理,因为局部性的存在,大多数情况下这个技术本身给性能带来的是正向的(要不然它今天也不会存在了),所以我们大多数情况下都不需要关注它的存在,还是放心大胆的写代码吧,不要因为我们这篇博客就把所有的if改成?:三目运算,可能对代码可读性的影响远大于性能提升的收益。再次强调下,我今天只是构造了一个极端的数据来验证其性能差异,因为局部性的存在大多数情况下分支预测都是对的。
119 0
|
Serverless
函数计算减少冷启动对性能的影响
函数计算减少冷启动对性能的影响
380 1
|
SQL 运维 监控
redis瞬时查询返回量过多导致出口流量打满,影响系统整体响应时间
redis瞬时查询返回量过多导致出口流量打满,影响系统整体响应时间
436 0
redis瞬时查询返回量过多导致出口流量打满,影响系统整体响应时间
|
SQL 存储 缓存
原来count(*)就是我们系统的接口性能变差100倍的真凶…
原来count(*)就是我们系统的接口性能变差100倍的真凶…
|
存储 NoSQL 测试技术
rediskey值内存消耗以及性能影响
rediskey值内存消耗以及性能影响
193 0
|
测试技术 应用服务中间件 Apache
QPS、TPS、并发用户数、吞吐量等定义
QPS (Queries Per Second) 是每秒查询率 ,是一台服务器 每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内 所处理流量多少的衡量标准, 即每秒的响应请求数,也即是最大吞吐能力。
3799 0
|
SQL NoSQL 安全
只改了五行代码接口吞吐量提升了10多倍
首先,提升日志打印级别到DEBUG。emm... 提升不大,好像增加了10左右。 然后,拆线程 @Async 注解使用线程池,控制代码线程池数量(之前存在3个线程池,统一配置的核心线程数为100)结合业务,服务总核心线程数控制在50以内,同步增加阻塞最大大小。结果还可以,提升了50,接近200了。
169 0
|
缓存 负载均衡 监控
提升系统 10 倍性能的 10 个建议!
在线经济活动的比例日益提高,就连发展中国家和地区的经济活动都已经有5%以上在线进行了(相关数据请参考本文后面的资源)。在这个超级链接、随时在线的现代世界,用户的期望也远非昔日可比。如果你的网站不能马上响应,你的应用不能立即运行,用户转身就会投奔你的竞争对手。
提升系统 10 倍性能的 10 个建议!