对于比较大的数据库,磁盘I/O 一般总会成为数据库的一个性能瓶颈
SQL优化,数据库对象优化,数据库参数优化,以及应用程序优化等,大部分都是想用过减少或延缓磁盘读来减轻磁盘I/O的压力及其对性能的影响.
解决磁盘I/O问题,减少或延缓磁盘操作是一重要方面,但磁盘I/O是不可避免的,因此,增强磁盘I/O本身的性能和吞吐量也是一个重要方面.
以下涉及到磁盘阵列,符号链接,裸设备等更底层的方面
1.磁盘阵列
RAID Redundant Array of Inexpensive Disks 翻译为’廉价磁盘冗余阵列’,也就是磁盘阵列.
RAID就是按照一定策略将数据分布到若干物理磁盘上
=>增强数据存储的可靠性,提高数据读写的整体性能(通过分布实现了数据的’并行’读写)
2.常见RAID级别及其特性
3.如何选择RAID级别
1.数据读写都很频繁,可靠性要求也很高,最好选择RAID 10;
2.数据读很频繁,写相对较少,对可靠性有一定要求,可以选择RAID 5;
3.数据读写都很频繁,但可靠性要求不高,可以选择 RAID 0;
4.虚拟文件卷或软RAID
模拟实现RAID的特性,利用操作系统中提供的软件包.
ps:使用Symbolic links存在一定的安全风险,如果不使用Symbolic links,应通过启动参数skip-symbolic-links禁用这一功能
6.禁止操作系统更新文件的atime属性
atime 是linux/unix 系统下的一个文件属性,每当读取文件时,操作系统都会将读操作发生的时间回写到磁盘上.对于读写频繁的数据库文件来说,记录文件的访问时间一般没有任何用处,却会增加磁盘系统的负担,影响I/O的性能!因此,可以通过设置文件系统的mount属性,阻止操作系统写atime信息,以减轻磁盘I/O的负担.
linux:
修改文件系统配置文件/etc/fstab,指定noatime选项
LABEL=/home /home ext3 noatime 1 2
然后重新mount文件系统
#mount -oremount /home
这样以后读/home 下文件就不会再写磁盘了
7.用裸设备(Raw Device) 存放InnoDB的共享表空间
MyISAM存储引擎有自己的索引缓存机制,但数据文件的读写完全依赖于操作系统,操作系统磁盘I/O缓存对MyISAM表的存取很重要.
但InnoDB存储一起拿与MyISAM不同,它采用类似Oracle的数据缓存机制来Cache索引和数据,操作系统的磁盘I/O缓存对其性能不仅没有帮助,甚至还有反作用.因此,在InnoDB缓存充足的情况下,可以考虑使用Raw Device来存放InnoDB共享表空间