微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

增加并发后, 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相关的表)

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

(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

原文地址:https://cloud.tencent.com/developer/article/2017294

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐