当前位置: 首页 > 工具软件 > Olivia > 使用案例 >

linux性能调优【磁盘I/O调度策略】【MySQL】#Olivia丶长歌#

饶滨海
2023-12-01

磁盘I/OLinux提供了cfq, deadlinenoop三种调度策略

      cfq: 这个名字是Complete Fairness Queueing的缩写,它是一个复杂的调度策略,按进程创建多个队列,试图保持对多个进程的公平(这就没考虑读操作和写操作的不同耗时)

       deadline: 这个策略比较简单,只分了读和写两个队列(这显然会加速读取量比较大的系统),叫这个名字是内核为每个I/O操作都给出了一个超时时间

      noop: 这个策略最简单,只有单个队列,只有一些简单合并操作

      考虑到硬件配置、实际应用场景(读写比例、顺序还是随机读写)的差异,上面的简单解释对于实际选择没有太大帮助,实际该选择哪个基本还是要实测来验证。不过下面几条说明供参考:

根据多篇文章的说法,deadlinenoop差异不是太大,但它们俩与cfq差异就比较大

      MySQL这类数据存储系统不要使用cfq(时序数据库可能会有所不同。不过也有说从来没见过deadlinecfq差的情况),尽量使用deadline

     对于虚拟机上面的磁盘,建议采用比较简单的noop,毕竟数据实际上怎么落盘取决于虚拟化那一层

     几个vm的默认值是:centos6cfqubuntu12.04xxxxcentos7ubuntu14.04deadline

MySQL数据库环境调整磁盘IO调度算法

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

 

 查看当前系统支持的磁盘IO调度算法

[root@localhost~]#dmesg | grep -i scheduler
io scheduler noop registered
io scheduler anticipatory registered
io scheduler deadline registered
io scheduler cfq registered (default)  

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


 也可以用以下命令查看:

 [root@localhost ~]# more/sys/block/sda/queue/scheduler
 noop anticipatory deadline [cfq] 
  备注
:括号里括起来的即为当前调度算法值
 
 修改当前块设备使用的
io调度算法为deadline:
 [root@localhost ~]# echo"deadline" > /sys/block/sda/queue/scheduler
  备注:修改立即生效
 
  [root@localhost ~]# more/sys/block/sda/queue/scheduler
  noop anticipatory [deadline] cfq

 

如果已经部署了MySQL数据库环境,需要重新启动MySQL。

 类似资料: