Maison > Article > base de données > mysql学习记录(二十一)--调整linuxI/O以提高mysql运行效率_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
二、实践:
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
备注:由于各种原因,其他本节相关实验等过段时间再做。