本节介绍了当您可以为数据库服务器分配更多和更快的存储硬件时,如何配置存储设备。有关优化 InnoDB
配置以提高 I/O 性能的信息,请参阅 第 10.5.8 节“优化 InnoDB 磁盘 I/O”。
磁盘寻道是性能的巨大瓶颈。当数据量开始增长到无法有效缓存时,这个问题就会变得更加明显。对于您或多或少随机访问数据的大型数据库,您可以确定至少需要一次磁盘寻道来读取数据,并且需要几次磁盘寻道来写入数据。为了最大程度地减少此问题,请使用寻道时间短的磁盘。
通过以下两种方式增加可用磁盘主轴的数量(从而减少寻道开销):将文件符号链接到不同的磁盘或对磁盘进行条带化
使用符号链接
这意味着,对于
MyISAM
表,您可以将索引文件和数据文件从其在数据目录中的通常位置符号链接到另一个磁盘(也可以是条带化的)。假设该磁盘不用于其他目的,这会同时缩短寻道时间和读取时间。请参阅 第 10.12.2 节“使用符号链接”。不支持对
InnoDB
表使用符号链接。但是,可以将InnoDB
数据文件和日志文件放在不同的物理磁盘上。有关更多信息,请参阅 第 10.5.8 节“优化 InnoDB 磁盘 I/O”。条带化意味着您拥有许多磁盘,并将第一个块放在第一个磁盘上,将第二个块放在第二个磁盘上,并将第
N
个块放在(
)磁盘上,依此类推。这意味着,如果您的正常数据大小小于条带大小(或完全对齐),则性能会大大提高。条带化在很大程度上取决于操作系统和条带大小,因此请使用不同的条带大小对您的应用程序进行基准测试。请参阅 第 10.13.2 节“使用您自己的基准测试”。N
MODnumber_of_disks
条带化的速度差异非常依赖于参数。根据您设置条带化参数和磁盘数量的方式,您可能会获得以数量级衡量的差异。您必须选择优化随机访问或顺序访问。
为了提高可靠性,您可能希望使用 RAID 0+1(条带化加镜像),但在这种情况下,您需要 2 ×
N
个驱动器来保存N
个驱动器的数据。如果您有足够的资金,这可能是最好的选择。但是,您可能还需要投资一些卷管理软件才能有效地处理它。一个不错的选择是根据数据类型的关键程度来改变 RAID 级别。例如,将可以重新生成的一般重要数据存储在 RAID 0 磁盘上,但将真正重要的数据(例如主机信息和日志)存储在 RAID 0+1 或 RAID
N
磁盘上。如果您有大量写入操作,则 RAIDN
可能会出现问题,因为更新奇偶校验位需要时间。您还可以为数据库使用的文件系统设置参数
如果您不需要知道上次访问文件的时间(这在数据库服务器上并不是很有用),则可以使用
-o noatime
选项挂载文件系统。这会跳过文件系统上 inode 中上次访问时间的更新,从而避免了一些磁盘寻道。在许多操作系统上,您可以通过使用
-o async
选项挂载文件系统来将其设置为异步更新。如果您的计算机相当稳定,那么这应该可以为您提供更好的性能,而不会牺牲太多可靠性。(在 Linux 上,默认情况下启用此标志。)
在考虑是否将 NFS 与 MySQL 一起使用时,您应该谨慎。潜在问题(因操作系统和 NFS 版本而异)包括以下内容
放置在 NFS 卷上的 MySQL 数据和日志文件可能会被锁定并无法使用。当多个 MySQL 实例访问同一个数据目录或 MySQL 未正确关闭(例如,由于断电)时,可能会出现锁定问题。NFS 版本 4 通过引入建议性锁定和基于租约的锁定来解决潜在的锁定问题。但是,不建议在 MySQL 实例之间共享数据目录。
由于消息接收顺序错误或网络流量丢失而导致数据不一致。为避免此问题,请使用带有
hard
和intr
挂载选项的 TCP。最大文件大小限制。NFS 版本 2 客户端只能访问文件的最低 2GB(带符号的 32 位偏移量)。NFS 版本 3 客户端支持更大的文件(最大 64 位偏移量)。支持的最大文件大小还取决于 NFS 服务器的本地文件系统。
在专业 SAN 环境或其他存储系统中使用 NFS 比在此类环境之外使用 NFS 通常提供更高的可靠性。但是,SAN 环境中的 NFS 速度可能比直接连接或总线连接的非旋转存储慢。
如果您选择使用 NFS,建议使用 NFS 版本 4 或更高版本,并且在部署到生产环境之前彻底测试您的 NFS 设置。