登录
首页 >  数据库 >  MySQL

第02问:怎么模仿磁盘 IO 慢的情况?

来源:SegmentFault

时间:2023-01-27 12:11:21 317浏览 收藏

编程并不是一个机械性的工作,而是需要有思考,有创新的工作,语法是固定的,但解决问题的思路则是依靠人的思维,这就需要我们坚持学习和更新自己的知识。今天golang学习网就整理分享《第02问:怎么模仿磁盘 IO 慢的情况?》,文章讲解的知识点主要包括MySQL、数据库,如果你对数据库方面的知识点感兴趣,就不要错过golang学习网,在这可以对大家的知识积累有所帮助,助力开发能力的提升。

专栏首图-黄炎.png

问题:

怎么模仿磁盘 IO 慢的情况?

实验:

1. 创建延迟的磁盘

用 dd 创造一片 100M 的文件

图片1.png

将创建的文件用 losetup 虚拟成块设备 /dev/loop3

图片2.png

将块设备 /dev/loop3 映射成带延迟的设备(对于读操作和写操作都延迟 100ms)

图片3.png

2. 用 MySQL 进行实验 

将磁盘格式化,并载入

图片4.png

用 dbdeployer 安装 MySQL,将 binlog 的位置设置到 /mnt/slow,开启双 1 刷盘参数

图片5.png

用 mysqlslap 进行压力测试

图片6.png

通过 iostat 可以观察到 binlog 所在的块设备 IO 发生饱和:

  1. dm-0 (/dev/mapper/dm-slow) 设备的 IO 出现了排队(aqu-sz),使用率饱和。
  2. loop3 是 dm-0 背后的块设备,其 IO 还有充足的能力,可证明 dm-0 带有 IO 延迟。

图片7.png

通过 pt-ioprofile 观察 MySQL 的 IO 消耗时间,可以看到花费在 binlog IO 上的时间远大于其他消耗。

图片8.png

结果:

我们制造了一个慢 IO 的设备,将 MySQL binlog 放在其中,制造了 binlog IO 慢的场景。有了这个手段,之后我们可以分析 MySQL 在局部文件 IO 慢时,哪些状态量会发生变化,以及 MySQL 会发生什么行为。


黄炎自媒体.png

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于数据库的相关知识,也可关注golang学习网公众号。

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表