8.12.2 优化磁盘 I/O

本节介绍当您可以将更多和更快的存储硬件分配给数据库服务器时配置存储设备的方法。有关优化InnoDB配置以提高 I/O 性能的信息,请参见第 8.5.8 节“优化 InnoDB 磁盘 I/O”

  • 磁盘寻道是巨大的性能瓶颈。当数据量开始增长到无法进行有效缓存时,此问题将变得更加明显。对于大型数据库,您或多或少地随机访问数据,可以确保至少需要读取一个磁盘并要写一些磁盘。为了最小化此问题,请使用寻道时间短的磁盘。

  • 通过将文件符号链接到不同的磁盘或分割磁盘来增加可用磁盘心轴的数量(从而减少查找开销):

  • 使用符号链接

这意味着,对于MyISAMtable,您将索引文件和数据文件从它们在数据目录中的通常位置符号链接到另一个磁盘(也可能是带区的)。假设磁盘也没有用于其他目的,这将使查找和读取时间都更好。参见第 8.12.3 节“使用符号链接”

不支持将符号链接与InnoDBtable 一起使用。但是,可以将InnoDB数据和日志文件放置在不同的物理磁盘上。有关更多信息,请参见第 8.5.8 节“优化 InnoDB 磁盘 I/O”

  • Striping

条带化意味着您有很多磁盘,并且将第一个块放在第一个磁盘上,将第二个块放在第二个磁盘上,并在(N MOD number_of_disks)磁盘上放置* N * -th 个块,依此类推。这意味着,如果您的常规数据大小小于条带大小(或完全对齐),则性能会好得多。条带化非常依赖于 os 和条带大小,因此请使用不同的条带大小对应用程序进行基准测试。参见第 8.13.2 节“使用自己的基准”

剥离速度差异非常取决于参数。根据设置条带化参数和磁盘数量的方式,可能会获得数量级上的差异。您必须选择针对随机或 Sequences 访问进行优化。

  • 为了提高可靠性,您可能需要使用 RAID 0 1(条带化和镜像),但是在这种情况下,需要 2 个* * N 驱动器来保存 N *数据驱动器。如果您有足够的钱,这可能是最好的选择。但是,您可能还必须投资购买一些卷 Management 软件才能有效地处理它。

  • 一个不错的选择是根据数据类型的关键程度来改变 RAID 级别。例如,存储可以在 RAID 0 磁盘上重新生成的次要数据,但将 true 重要的数据(例如主机信息和日志)存储在 RAID 0 1 或 RAID * N *磁盘上。如果您进行多次写入操作,则 RAID * N *可能会成为问题,这是由于更新奇偶校验位所需的时间。

  • 您还可以为数据库使用的文件系统设置参数:

如果您不需要知道上次访问文件的时间(这在数据库服务器上并没有什么用),则可以使用-o noatime选项挂载文件系统。这样就跳过了对文件系统上 inode 的最后访问时间的更新,从而避免了某些磁盘搜索。

在许多 os 上,可以通过使用-o async选项挂载来将文件系统设置为异步更新。如果您的计算机相当稳定,这将在不牺牲可靠性的前提下为您提供更好的性能。 (此标志在 Linux 上默认为打开.)

将 NFS 与 MySQL 配合使用

在考虑是否将 NFS 与 MySQL 一起使用时,您应该谨慎。根据 os 和 NFS 版本的不同,潜在的问题包括:

  • 放置在 NFS 卷上的 MySQL 数据和日志文件被锁定,无法使用。例如,在多个 MySQL 实例访问同一数据目录或由于断电而导致 MySQL 不正确关闭的情况下,可能会发生锁定问题。 NFS 版本 4 通过引入咨询和基于租约的锁定解决了潜在的锁定问题。但是,不建议在 MySQL 实例之间共享数据目录。

  • 由于接收到的消息混乱或网络流量丢失而引入的数据不一致。为避免此问题,请使用带有hardintr挂载选项的 TCP。

  • 最大文件大小限制。 NFS 版本 2Client 端只能访问文件的最低 2GB(带符号的 32 位偏移量)。 NFS 版本 3Client 端支持更大的文件(最大 64 位偏移)。支持的最大文件大小还取决于 NFS 服务器的本地文件系统。

与在此类环境之外使用 NFS 相比,在专业的 SAN 环境或其他存储系统中使用 NFS 往往会提供更高的可靠性。但是,SAN 环境中的 NFS 可能比直接连接或总线连接的非旋转存储要慢。

如果选择使用 NFS,则建议使用 NFS 版本 4 或更高版本,以及在部署到生产环境之前彻底测试 NFS 设置。