您的位置:首页 > 运维架构 > Linux

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

2015-11-03 23:16 651 查看
一、理论:

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

二、实践:

abc@ubuntu:~$ dmesg | grep -i scheduler

[    1.124750] io scheduler noop registered

[    1.124754] io scheduler deadline registered (default)

[    1.124837] io scheduler cfq registered

abc@ubuntu:~$ more /sys/block/sda/queue/scheduler 
noop [deadline] cfq 

备注:由于各种原因,其他本节相关实验等过段时间再做。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql 数据库 io 数据 linux