· 磁盘搜索是巨大的性能瓶颈。当数据量变得非常大以致于缓存性能变得不可能有效时,该问题变得更加明显。对于大数据库,其中你或多或少地随机访问数据,你可以确信对读取操作需要至少一次硬盘搜索,写操作需要多次硬盘搜索。要想使该问题最小化,应使用搜索次数较少的磁盘。
· 通过链接文件到不同的磁盘或对硬盘分段来增加可用磁盘锭数量(因此降低搜索成本):
o 使用符号链接
这说明,对于MyISAM表,你符号链接索引文件和/或数据文件,从它们数据目录内的通常位置到另一个硬盘(也可以被条纹化)。这将使搜索和读次数达到最好,假定硬盘不再为其它目的使用。参见7.6.1节,“使用符号链接”。
o 分条
分条意味着你有许多磁盘,将第1个块放到第1个硬盘,第2个块放到第2个磁盘,并且第N块在(N mod number_of_disks)磁盘上等等。这意味着如果正常数据大小小于分条大小(或完全匹配),能够得到最佳性能。分条完全取决于操作系统和分条大小,因此用不同的条纹大小对应用程序进行基准测试。参见7.1.5节,“使用自己的基准”。
分条的不同速度完全依赖于参数。依赖于怎样设置条纹参数和硬盘数量,可以根据不同数量级别得到不同的标准。你必须进行选择以便优化随机或顺序存取。
· 为了高可靠性你可能想使用RAID 0+1(条纹加镜像),但在这种情况下,需要2*N块磁盘来保持N个磁盘的数据。如果你肯为它花钱,这可能是最好的选项。然而,你可能还必须投资一部分资金到卷管理软件中以便有效地管理它。
· 一个较好的选择是根据数据类型的重要性程度改变RAID级别。例如,保存可以在RAID 0硬盘上重新生成的不太重要的数据,但保存 真正重要数据(例如主机信息和日志)到RAID 0+1或RAID N硬盘。如果你有许多写操作,RAID N可能会存在问题,因为需要时间来更新校验位。
· 在Linux上,通过配置磁盘接口时使用hdparm,你可以获得更多的性能。(在一般负载下达到100%并不困难。)下面的hdparm选项 应该非常适用于MySQL,并且可能适用于许多其它应用程序:
hdparm -m 16 -d 1
请注意,当使用该命令时,性能和可靠性依赖于硬件,因此我们强烈建议,使用hdparm后,完全测试你的系统。为获取更多详细信息,请查阅hdparm手册帮助页。如果hdparm使用的不好,会导致文件系统破坏,因此试验之前请做好每个备份!
· 也可以设置数据库使用的文件系统参数:
如果不需要知道文件最后一次访问的时间(这对数据库服务器并没有实际的用途),可以用-o noatime选项安装文件系统。这将跳过对文件系统中的节点的最后一次访问时间的更新,从而能够避免一些硬盘搜索。
在许多操作系统中,用-o async选项安装,可以将文件系统设置为异步更新。如果电脑相当稳定,这应该给予你更高的性能而不需要牺牲太多的可靠性。(该标志是Linux中默认开启。)