MySQL数据库中怎么调整磁盘IO调度算法

70次阅读
没有评论

共计 1410 个字符,预计需要花费 4 分钟才能阅读完成。

MySQL 数据库中怎么调整磁盘 IO 调度算法,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

查看当前系统支持的磁盘 IO 调度算法
[root@alpha-mongo-140-52 ~]# dmesg | grep -i scheduler
io scheduler noop registered
io scheduler anticipatory registered
io scheduler deadline registered
io scheduler cfq registered (default)

default 代表当前设备使用的缺省的 IO 调度算法

也可以用以下命令查看:
[root@test ~]# more /sys/block/sda/queue/scheduler
noop anticipatory deadline [cfq] 
备注: 括号里括起来的即为当前调度算法值

修改当前块设备使用的 io 调度算法为 deadline:
[root@test ~]# echo deadline /sys/block/sda/queue/scheduler
备注: 修改立即生效

[root@test ~]# more /sys/block/sda/queue/scheduler
noop anticipatory [deadline] cfq

调度算法介绍:
Linux 有四种 IO 调度算法,分别为完全公平队列算法 (Complete Fair Queuing/CFQ), NOOP 算法(No Operation), 最后期限算法(Deadline) 和预期算法(anticipatory).

完全队列公平算法把磁盘 I / O 请求按照进程分别放入进程对应的队列中。CFQ 的公平是针对进程而言的,每一个提交 I / O 请求的进程都会有自己的 I / O 队列,CFQ 以时间片算法为前提,轮流调动队列,默认当前队列中取出 4 个请求来处理,然后接着处理下一个队列里的 4 个请求,确保每个进程享有的 IO 资源是均衡的。CFQ 是 Linux 默认的 I / O 调度算法。

NOOP 算法是不对 I / O 请求排序,除了合并请求也不会进行其他任何优化,用最简单的先进先出队列顺序提交 I / O 请求,NOOP 算法面向的主要是随机 IO 访问设备 SSD 等。

最后期限算法 (Deadline) 除了维护了一个拥有合并和排序功能的请求队列外,额外维护了两个队列,分别是读请求队列和写请求队列,他们都是带有超时的请求队列,当新来一个 IO 请求时,会被同时插入普通队列和读写队列,然后 I / O 调度器正常处理普通队列中的请求。当调度器发现读写请求队列中的请求超时的时候,会优先处理这些请求,保证尽可能不产生饥饿请求。对于 MYSQL 来说,建议设置为 Deadline,对 MYSQL 来说是很好的调度算法。

预期算法 (anticipatory) 是基于预测的 I / O 算法,它和 Deadline 类似,也维护了三个请求队列,区别在于,预期算法处理完一个 IO 请求后并不会直接返回处理下一个请求,而是等待默认 6 秒,等待期间如果有新进来的相邻扇区的请求,会直接处理新来的请求,当等待 6 秒结束后,调度才返回处理下一个队列请求。anticipatory 适合写多读少的环境,不适合 MySQL 等随机读取较多的数据库环境。

看完上述内容,你们掌握 MySQL 数据库中怎么调整磁盘 IO 调度算法的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注丸趣 TV 行业资讯频道,感谢各位的阅读!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-01发表,共计1410字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)