前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >增加并发数后,TPS增加, IOPS却下降 现象分析

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

原创
作者头像
大大刺猬
发布2022-06-07 15:33:36
2.6K1
发布2022-06-07 15:33:36
举报
文章被收录于专栏:大大刺猬大大刺猬

当增加并发后, tps会增加, 那系统iops是增加还是减少呢?

我第一反应是增加, 毕竟事务变多了, 写的数据肯定多了卅, 那iops肯定增加卅.

如下是我测试的只写事务.

环境

主机: CVM 4C8G centos7.6 PAGESIZE=4096

数据库: mysql 5.7.38

数据库关键参数:

innodb_flush_log_at_trx_commit = 1

autocommit = ON

innodb_buffer_pool_size = 4.5G

innodb_log_buffer_size = 64M

innodb_page_size=16K

测试工具: sysbench 1.0.17

表数据量: 10*100000

注: 为了方便观察, 仅压测只写事务

现象复现

仅增加并发数量, 观察tps 和 iops

每次压测前都重启了数据库(也可以truncate相关的表)

(注意: 压测工具和数据库在同一台服务器上,对性能有影响, 但不影响本次实验)

代码语言:javascript
复制
(root@127.0.0.1) [(none)]> select * from sys.io_global_by_wait_by_latency where event_name in ('sql/binlog','innodb/innodb_data_file','innodb/innodb_log_file') order by 2 desc ;
+-------------------------+-------+---------------+-------------+-------------+--------------+---------------+--------------+------------+------------+-----------+-------------+---------------+-------------+
| event_name              | total | total_latency | avg_latency | max_latency | read_latency | write_latency | misc_latency | count_read | total_read | avg_read  | count_write | total_written | avg_written |
+-------------------------+-------+---------------+-------------+-------------+--------------+---------------+--------------+------------+------------+-----------+-------------+---------------+-------------+
| innodb/innodb_data_file |  1506 | 100.97 ms     | 67.05 us    | 67.56 ms    | 7.11 ms      | 23.27 ms      | 70.59 ms     |       1284 | 22.08 MiB  | 17.61 KiB |          87 | 50.59 MiB     | 595.49 KiB  |
| innodb/innodb_log_file  |    27 | 4.84 ms       | 179.22 us   | 1.60 ms     | 43.08 us     | 65.03 us      | 4.73 ms      |          7 | 68.50 KiB  | 9.79 KiB  |           4 | 2.00 KiB      | 512 bytes   |
| sql/binlog              |    21 | 2.27 ms       | 108.22 us   | 1.17 ms     | 5.75 us      | 14.62 us      | 2.25 ms      |          4 | 611 bytes  | 153 bytes |           2 | 194 bytes     | 97 bytes    |
+-------------------------+-------+---------------+-------------+-------------+--------------+---------------+--------------+------------+------------+-----------+-------------+---------------+-------------+
3 rows in set (0.01 sec)

(root@127.0.0.1) [(none)]> 

4并发

TPS: 800

WIOPS: 3200

8并发

TPS 1200

WIOPS 3000

80并发

TPS 1500

WIOPS 800 (有波动)

800并发

TPS 1400

WIOPS 250

(是不是和想象的不一样....)

原因分析

汇总下: 并发数增多后, innodb/innodb_log_file 事件反而减少了, 但是平均延迟却增大了, 每次写入的数据量也增大了.

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

详情如下:

结论

仅针对本次实验

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

参考文章

https://mp.weixin.qq.com/s/7u0Tmy1F_3TGBhzvBrwMWw

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 环境
  • 现象复现
    • 4并发
      • 8并发
        • 80并发
          • 800并发
          • 原因分析
          • 结论
          相关产品与服务
          云数据库 SQL Server
          腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档