怎么模仿磁盘 IO 慢的情况?
用 dd 创造一片 100M 的文件
将创建的文件用 losetup 虚拟成块设备 /dev/loop3
将块设备 /dev/loop3 映射成带延迟的设备(对于读 *** 作和写 *** 作都延迟 100ms)
将磁盘格式化,并载入
用 dbdeployer 安装 MySQL,将 binlog 的位置设置到 /mnt/slow,开启双 1 刷盘参数
用 mysqlslap 进行压力测试
通过 iostat 可以观察到 binlog 所在的块设备 IO 发生饱和:
通过 pt-ioprofile 观察 MySQL 的 IO 消耗时间,可以看到花费在 binlog IO 上的时间远大于其他消耗。
我们制造了一个慢 IO 的设备,将 MySQL binlog 放在其中,制造了 binlog IO 慢的场景。有了这个手段,之后我们可以分析 MySQL 在局部文件 IO 慢时,哪些状态量会发生变化,以及 MySQL 会发生什么行为。
?1 检查硬件,检查硬盘是否有故障,如果有,应及时更换;
2 检查文件系统,查看是否有文件系统损坏或损坏,如果有,应尝试修复文件系统;
3 检查硬盘分区方案,如果分区方案不合理,应重新进行分区;
4 检查装机过程,检查安装系统时使用的ISO文件是否有损坏,如果有,应重新下载正确的ISO文件;
5 重新启动服务器,在重新安装系统时,检查服务器是否安装了额外的软件和硬件,如果安装了,应及时取消它们;
6 同时安装多个分区,可以加快安装过程的速度;
7 降低系统要求,调整系统配置,使系统装机速度更快;
8 使用硬盘分区软件,可以提高系统装机速度。嗯,和你一样有同感。
不过,机械硬盘的速度本来就快不到哪去,再加上磁盘本身读写就频繁,于是IO就是非常低的。
我曾经测试过国内主流云平台的磁盘IO速度(都是同一档机器)感觉都差不多,阿里云IO 20MB/S 腾讯云256MB/S 百度云 2077MB/S
如果你实在无法忍受就多花点钱买国外服务商的吧,标配都是SSD的。在数据库中插入数据,实际上不是实时写数据到数据文件的,但要实时写事务日志文件到日志文件中,日志文件中的内容,你可以理解为就是sql命令的具体 *** 作,对事务型数据库,批量插入大量数据,最好是把事务日志暂停了,然后,在做 *** 作。
那样就会快很多。
你不在在生产库的生产过程中做这种 *** 作。
在生产过程中,你只能分时间段,分批量,用你的命令导入数据。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)