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调度算法的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程之家行业资讯频道,感谢各位的阅读!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。