MySQL服务器Linux IO调度器算法的选择

IO调度器(IO Scheduler)是操作系统用来决定块设备上IO操作提交顺序的方法。存在的目的有两个,一是提高IO吞吐量,二是降低IO响

一.  io调度器(io scheduler)是操作系统用来决定块设备上io操作提交顺序的方法。存在的目的有两个,一是提高io吞吐量,二是降低io响应时间。然而io吞吐量和io响应时间往往是矛盾的,为了尽量平衡这两者,io调度器提供了多种调度算法来适应不同的io请求场景。其中,对数据库这种随机读写的场景最有利的算法是deanline。接着我们按照从简单到复杂的顺序,下面是linux 2.6内核提供的几种io调度算法。

1、NOOP
NOOP算法的全写为No Operation。该算法实现了最最简单的FIFO队列,所有IO请求大致按照先来后到的顺序进行操作。之所以说“大致”,原因是NOOP在FIFO的基础上还做了相邻IO请求的合并,并不是完完全全按照先进先出的规则满足IO请求。
假设有如下的io请求序列:
100,500,101,10,56,1000
NOOP将会按照如下顺序满足:
100(101),500,10,56,1000

2、CFQ
CFQ算法的全写为Completely Fair Queuing。该算法的特点是按照IO请求的地址进行排序,而不是按照先来后到的顺序来进行响应。
假设有如下的io请求序列:
100,500,101,10,56,1000
CFQ将会按照如下顺序满足:
100,101,500,1000,10,56

在传统的SAS盘上,磁盘寻道花去了绝大多数的IO响应时间。CFQ的出发点是对IO地址进行排序,以尽量少的磁盘旋转次数来满足尽可能多的IO请求。在CFQ算法下,SAS盘的吞吐量大大提高了。但是相比于NOOP的缺点是,先来的IO请求并不一定能被满足,可能会出现饿死的情况。

3、DEADLINE
DEADLINE在CFQ的基础上,,解决了IO请求饿死的极端情况。除了CFQ本身具有的IO排序队列之外,DEADLINE额外分别为读IO和写IO提供了FIFO队列。读FIFO队列的最大等待时间为500ms,写FIFO队列的最大等待时间为5s。FIFO队列内的IO请求优先级要比CFQ队列中的高,,而读FIFO队列的优先级又比写FIFO队列的优先级高。优先级可以表示如下:
FIFO(Read) > FIFO(Write) > CFQ

4、ANTICIPATORY
CFQ和DEADLINE考虑的焦点在于满足零散IO请求上。对于连续的IO请求,比如顺序读,并没有做优化。为了满足随机IO和顺序IO混合的场景,Linux还支持ANTICIPATORY调度算法。ANTICIPATORY的在DEADLINE的基础上,为每个读IO都设置了6ms的等待时间窗口。如果在这6ms内OS收到了相邻位置的读IO请求,就可以立即满足。

二. Linux操作系统IO调度器算法的查看和修改(以CentOS5.5为例):

[root@dbserver2 ~]# cat /etc/RedHat-release

CentOS release 5.5 (Final)

[root@dbserver2 ~]# uname -a

Linux dbserver2 2.6.18-194.el5 #1 SMP Fri Apr 2 14:58:14 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux

1.机器为2.6内核,查看IO调度算法设置的方法:

[root@dbserver2 ~]# fdisk -l

 

Disk /dev/sda: 598.8 GB, 598879502336 bytes

255 heads, 63 sectors/track, 72809 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

 

  Device Boot      Start        End      Blocks  Id  System

/dev/sda1  *          1          13      104391  83  Linux

/dev/sda2              14      65669  527381820  83  Linux

/dev/sda3          65670      68219    20482875  83  Linux

/dev/sda4          68220      72809    36869175    5  Extended

/dev/sda5          68220      70769    20482843+  83  Linux

/dev/sda6          70770      72809    16386268+  82  Linux swap / Solaris

[root@dbserver2 ~]#

 

[root@dbserver2 ~]# find / -iname “scheduler”

/sys/block/sr0/queue/scheduler

/sys/block/sda/queue/scheduler

查看系统当前IO调度算法

[root@dbserver2 ~]# cat /sys/block/sda/queue/scheduler

noop anticipatory deadline [cfq]    —-括号中为当前使用的算法

 

2.修改IO调度算法:

[root@test80 ~]# echo deadline > /sys/block/sda/queue/scheduler

[root@test80 ~]# cat /sys/block/sda/queue/scheduler

noop anticipatory [deadline] cfq  可以看到IO调度算法已经修改为deadline

三. 针对MYSQL数据库服务器的IO调度算法优化设置:

1.CFQ使用于IO大小非常均匀的场景

2.比较复杂的OLTP环境最好使用DeadLine算法

3.IO性能不是瓶颈的时候可以使用Noop算法

4.Anticipatory不适合数据库环境,DB服务器不要使用这种算法。

5.新兴的固态硬盘比如SSD、Fusion IO上,最简单的NOOP反而可能是最好的算法,因为其他三个算法的优化是基于缩短寻道时间的,而固态硬盘没有所谓的寻道时间且IO响应时间非常短。

linux

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/1913216.html

(0)
上一篇 2025年2月22日 17:32:16
下一篇 2025年2月22日 17:33:59

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 单机环境下安装多个MySQL服务器

    终于完成了单机上多个mysqld配置,我使用的是mysqld_safe命令来完成的。 Step1: 安装数据库: ./configure –prefix=/usr/local/m 终于完成了单机上多个mysqld配置,我使用的是…

    数据库 2025年2月23日
    200
  • 安全初始化MySQL服务器

    在安装完MySql服务器,设置好MySql的root用户密码后,就直接开始使用了,其实这样的MySql服务器还存在着一些不安全因素,本篇演示 在安装完mysql服务器,设置好mysql的root用户密码后,就直接开始使用了,其实这样的mys…

    数据库 2025年2月22日
    100
  • Linux下将MySQL服务添加到服务器的系统服务中

    Linux环境下将MySQL服务添加到服务器的系统服务中 1、了解MySQL程序路径 MySQL数据目录: /home/mysql/dataMySQL程序目录:/usr/lo 首页 → 数据库技术 背景: 阅读新闻 linux下将mysql…

    数据库 2025年2月22日
    200
  • MySQL之-服务器保持与MySQL的连接详解(图)

    服务器程序经常要访问数据库,并且服务器程序是长时间保持运行的,mysql有一个特点,当连接上数据库后不做任何操作,默认8小时候会自动关闭休眠的连接!一般情况下很难预料什么时候程序会执行数据库操作,如果连接被mysql断开了,会出现意想不到的…

    2025年2月21日
    200
  • window下怎么重启MySQl服务?

    window下重启MySQl服务的方法: 方法一:通过【计算机管理】界面来重启MySQl服务 1、鼠标移动到计算机,点击鼠标右键,选择“管理”。 2、在【计算机管理】界面中选择【服务与应用程序】下的【服务】。 3、服务默认是按字母排序的,所…

    2025年2月20日 数据库
    200
  • 两个MySql服务的应用

    两个MySql服务的应用兼容方法。 两个MySql服务的应用 一、如何在同一系统中安装两个MySql服务。 安装一个5.0版本的,再安装一个5.1版本的就可以了。我用的是mysql-5.0.45-win32.zip和mysql-5.1.28…

    数据库 2025年2月19日
    200
  • phpmyadmin报错:#2003 无法登录 MySQL服务器的解决方法

    通过phpmyadmin连接mysql数据库时提示:“2003 无法登录 MySQL服务器”。。。很明显这是没有启动mysql服务,右击我的电脑-管理-找到服务,找到mysql启动一下 通过phpmyadmin连接mysql数据库时提示:“…

    数据库 2025年2月19日
    200
  • 电脑中找不到mysql服务怎么办

    解决电脑中找不到mysql服务的方法:首先用管理员身份打开cmd命令框;然后进入mysql安装目录的bin文件夹下;最后运行【.mysqld.exe –install】命令即可。 解决电脑中找不到mysql服务的方法: 1、用管…

    2025年2月18日
    200
  • mysql window 服务无法启动怎么办

    mysql window服务无法启动的解决办法:1、找到mysql安装目录,并将其配置文件my.ini移至bin目录下;2、以管理员权限在命令行模式下进入bin目录下;3、执行“mysqld –initialize……

    2025年2月18日 数据库
    400
  • MySQL服务器的安装启动维护

    作为世界上最受欢迎的开源关系型数据库管理系统之一,MySQL以其强大功能和跨平台兼容性在业界和学术界占据了一席之地。不论是开发人员、数据库管理员,还是普通的技术爱好者,了解如何启动、管理和维护MySQL服务器都是一项宝贵的技能。本文将带你步…

    服务器 2025年2月16日
    200

发表回复

登录后才能评论