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等随机读取较多的数据库环境。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15498/viewspace-2155220/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/15498/viewspace-2155220/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值