RAID(Redundant Array of Inexpensive Disks):廉价磁盘冗余阵列
raid级别 | 特性 | 优点 | 缺点 |
raid0 | 也叫条带化(Stripe),按一定的条带大小将数据依次分布到各个磁盘,没有数据冗余 | 数据并发读写速度快,无额外磁盘空间开销,投资省 | 数据无冗余保护,可靠性差 |
raid1 | 也叫磁盘镜像(Mirror),两个磁盘一组,所有数据都同时写入两个磁盘,但读时从任一磁盘读都可以 | 数据有完全冗余保护,只要不出现两块镜像磁盘同时损坏,不会影响使用;可以提高并发读性能 | 在容量一定的情况下,需要2倍的磁盘,投资比较大 |
raid10 | raid1+raid0,先对磁盘做镜像,再条带化,兼具raid1可靠性和raid0的优良并发读写性能 | 可靠性高,并发读写性能优良 | 在容量一定的情况下,需要2倍的磁盘,投资比较大 |
raid4 | 像raid0一样条带化,不同的是需要额外增加一个磁盘,用来写各stripe的校验纠错数据 | raid中的一个磁盘损坏,器数据可以通过校验纠错数据计算出来,具有一定的容错保护能力,读数据速度快 | 每个stripe上数据的修改都要写校验纠错块,写性能受影响;所有纠错数据都在同一个磁盘上,风险大,也会形成一个性能瓶颈;出现坏盘时,读性能会下降 |
raid5 | 是对raid4的改进:将每个条带(stripe)的校验纠错数据块也分别写到各个磁盘,而不是写到一个特定的磁盘 | 基本同raid4,只是其写性能和数据保护能力要更强一点 | 写性能不及raid0.raid1和raid10,容错能力也不及raid1;在出现坏盘时,读性能会下降 |
选择raid
- 数据读写都很频繁,可靠性要求也很高,最好选择raid10
- 数据读很频繁,写相对较少,对可靠性有一定要求。可以选择raid5
- 数据读写都很频繁,但可靠性要求不高,可以选择raid0
MyISAM存储引擎,禁止操作系统更新文件的atime属性
atime是linux系统下的一个文件属性,每当读取文件时,操作系统都会将读操作发生的时间会写到磁盘上,对于读写频繁的数据库文件来说,记录文件的访问时间一般没有任何用处,却会增加磁盘系统的负担,影响IO的性能,因此可以通过设置文件系统的mount属性,阻止操作系统写atime信息,以减轻磁盘IO的负担。
打开系统配置文件
vim /etc/fstab
指定noatime选项
LABEL=/home /home ext3 noatime 1 2
重新mount文件系统
#mount -oremount /home
至此,读/home下文件就不会再写磁盘了。
InnoDB存储引擎用裸设备(raw device)存放innodb的共享表空间
- 修改mysql配置文件,在innodb_data_file_path参数中增加裸设备文件名并指定newraw属性
innodb_data_file_path=/dev/hdd1:3Gnewraw;/dev/hdd2:2Gnewraw
- 启动mysql,使其完成分区初始化工作,然后关闭mysql
- 将innodb_data_file_path中的newraw改成raw
- 重新启动即可开始使用mysql
调整IO调度算法
- 在完全随机的访问环境下,选择Deadline最后期限算法
- 写较多的环境下,选择Anticipatory预期算法
查看当前系统支持的IO调度算法
dmesg | grep -i scheduler
查看当前设备(/dev/sda)使用的IO调度算法
more /sys/block/sda/queue/scheduler
修改当前块设备(/dev/sda)使用的IO调度算法,修改IO调度算法后直接生效
echo "deadline" > /sys/block/sda/queue/scheduler
永久地修改IO调度算法,可以通过修改内核引导参数,增加elevator=调度程序名:
vi /boot/grub/menu.lst
kernel /boot/vmlinuz-2.6.18-308.el5 ro root=LABEL=/ elevator=deadline