mysql学习记录(二十一)--调整linuxI/O以提高mysq

时间:2019-05-11 09:42来源:计算机教程
mysql学习记录(二十一)--调整linuxI/O以提高mysql运行效率 一、概念: 1.使用磁盘阵列 RAID译成中文为“廉价磁盘冗余阵列”。简称“磁盘阵列” 2.常见raid级别: a.raid 0:条带化,将数据依

  图片 1

mysql学习记录(二十一)--调整linuxI/O以提高mysql运行效率

一、概念:
1.使用磁盘阵列
RAID译成中文为“廉价磁盘冗余阵列”。简称“磁盘阵列”
2.常见raid级别:
a.raid 0:条带化,将数据依次分布
b.raid 1:磁盘镜像,两个磁盘一组,写入时两个一起写入,读时从任意一个磁盘读
c.raid 10:先做磁盘镜像又做条带化,既有raid 1的可靠性和raid 0的优良并发性能
d.raid 4:像raid 0一样对磁盘组条带化,另需要加一个磁盘用来写各Stripe的校验纠错数据
e.raid 5:将每一个条带的校验纠错数据块也分别写到各个磁盘,各不是写到一个特定的磁盘
3.选择raid级别:
a.读写频繁,可靠性要求高,raid 10
b.读频繁而写较少,对可靠性有一定要求,raid 5
c.读写频繁,可靠性要求不高,rand 0
4.虚拟文件卷或软raid
a.linux下的逻辑卷系统lvm2,支持条带化
b.linux下的md驱动,支持raid 0,raid 1,raid 4,raid 5,raid 6
5.使用symbolic links分布I/O
a.可以利用操作系统的符号连接将不同的数据库、表或索引指向不同的物理磁盘,从而达到分布磁盘I/O的目的
b.将一个数据库指向其他物理磁盘
c.将MyISAM(其他存储引擎的表不支持)表的数据文件或索引文件指向其他物理磁盘
1)对于新建的表可以在create table中增加data directory和index directory
2)对于已有的表可以将数据文件或索引文件转移到目标磁盘,但表定义文件必须位于mysql数据文件目录下,不能用符号连接
6.禁止操作系统更新文件的atime属性
7.调整I/O调度算法:
a.NOOP算法:不对I/O请求排序,更适合随机设备。
b.最后期限算法:当系统存在大量顺序请求的时候,Deadline可能导致请求无法被很好的排序,引发频繁寻道。
c.预期算法:基于预测的I/O算法,适合写入较多的环境,不适合Mysql等随机读取较多的数据库环境
d.完全公平队列:将I/O请求按照进程分别放入进程对应的队列中。CFQ以时间片算法为前提,轮转调动队列
8.RAID卡电池充放电问题:
a.raid卡电池会自动充放电
9.RAID卡缓存策略:
10.RAID卡电池充放电带来的I/O性能波动
a.根据raid卡电池下次充放电的时间,定期在业务量较低的时候,提前进行充放电。
b.设置Forced WriteBack写策略,此时一定要有UPS之类的后备电源
11.NUMA架构优化:
a.多处理器结婚(SMP):对此进行扩展的方法有增加内存、使用更快的CPU、增加CPU、扩充I/O、增加更多的磁盘
b.SMP架构导致在扩展能力上被限制,NUMA架构出现了。NUMA把一台计算机分成多个节点,每个节点内部拥有多个CPU,节点内部使用共有的内存控制器,节点之间是通过互联模块进行连接和信息交互
c.NUMA的内存分配策略有以下4种:
1)缺省:总是在本地节点分配
2)绑定:强制分配到指定节点上
3)交叉:在所有节点或者指定节点上交叉分配内存
4)优先:在指定节点上分配,失败则在其他节点上分配
d.若单机只运行一个mysql实例,可以选择关闭NUMA
1)在BIOS中设置关闭
2)在/etc/grub.conf的kernel行追加numa = off
二、实践:
[email protected]:~$ dmesg | grep -i scheduler
[ 1.124750] io scheduler noop registered
[ 1.124754] io scheduler deadline registered (default)
[ 1.124837] io scheduler cfq registered
[email protected]:~$ more /sys/block/sda/queue/scheduler

noop [deadline] cfq

备注:由于各种原因,其他本节相关实验等过段时间再做。

http://www.bkjia.com/Mysql/1067864.htmlwww.bkjia.comtruehttp://www.bkjia.com/Mysql/1067864.htmlTechArticlemysql学习记录(二十一)--调整linuxI/O以提高mysql运行效率 一、概念: 1.使用磁盘阵列 RAID译成中文为廉价磁盘冗余阵列。简称磁盘阵列 2.常...

  图片 2

2. 禁止操作系统更新文件的atime属性

                   对于新建的表,可以通过在create table语句中增加 data directory 和index directory选项来完成例如 :
    图片 3
  对于已有的表,可以先将其数据文件(.MYD)或索引文件(.MYI)转移到目标磁盘,然后再建立符号连接即可,需要说明的是表定义文件(.frm)必须位于mysql数据文件目录下,不能用符号连接。

  (2) 将myisam (其它存储引擎的表不支持) 表的数据文件或索引文件指向其他物理磁盘。

  atime是linux/unix系统下的一个文件属性,每当读取文件时,操作系统都会将读操作发生的时间回写到磁盘上。 对于读写频繁的数据库文件来说,记录文件的访问时间一般没有任何用处,去会增加磁盘系统的负担,影响I/O的性能。通过设置文件系统的mount属性,阻止操作系统写atime信息。具体做法是修改文件系统配置文件/etc/fstab,指定noatime选项。
  图片 4

         mysql的数据库名和表名是与文件系统的目录名和文件名对应的,默认情况下,创建的数据库和表都存放在参数datadir定义的目录下。如果不使用RAID或逻辑卷,所有的表都放在一个磁盘设置上,无法发挥多磁盘并行读写的优势。这种情况,我们可以利用操作系统的符号连接(Symbolic Links)将不同的数据库或表,索引指向不同的物理磁盘,从而达到分布磁盘I/O的目的。

  总结:本章从操作系统的角度介绍了如何对mysql数据库进行优化,主要是讨论i/o的优化问题,文件系统分布的优化问题。由于涉及到操作系统,待以后在去深入。

编辑:计算机教程 本文来源:mysql学习记录(二十一)--调整linuxI/O以提高mysq

关键词: