MySQL 8.0 参考手册  / 第8章优化  / 8.12 优化MySQL服务器  /  8.12.1 优化磁盘 I/O

8.12.1 优化磁盘 I/O

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

  • 磁盘寻道是一个巨大的性能瓶颈。当数据量开始增长到无法进行有效缓存时,这个问题就会变得更加明显。对于您或多或少随机访问数据的大型数据库,您可以确定至少需要一个磁盘寻道来读取和几个磁盘寻道来写入内容。要尽量减少此问题,请使用寻道时间短的磁盘。

  • 通过将文件符号链接到不同的磁盘或条带化磁盘来增加可用磁盘轴的数量(从而减少寻道开销):

    • 使用符号链接

      这意味着,对于MyISAM表,您将索引文件和数据文件从它们在数据目录中的通常位置符号链接到另一个磁盘(也可能是条带化的)。假设磁盘也未用于其他目的,这会缩短查找和读取时间。请参阅 第 8.12.2 节,“使用符号链接”

      不支持将符号链接用于 InnoDB表。但是,可以将InnoDB数据和日志文件放在不同的物理磁盘上。有关详细信息,请参阅第 8.5.8 节,“优化 InnoDB 磁盘 I/O”

    • 条带化

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

      条带化的速度差异在 很大程度上取决于参数。根据您设置条带化参数和磁盘数量的方式,您可能会得到数量级的差异。您必须选择优化随机或顺序访问。

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

  • 一个不错的选择是根据数据类型的重要性来改变 RAID 级别。例如,将可以重新生成的次重要数据存储在RAID 0 磁盘上,但将真正重要的数据(如主机信息和日志)存储在RAID 0+1 或RAID N磁盘上。如果您有很多写入操作, RAID N可能会成为问题,因为更新奇偶校验位需要时间。

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

    如果您不需要知道上次访问文件的时间(这在数据库服务器上并不是很有用),您可以使用该-o noatime 选项挂载文件系统。这会跳过对文件系统 inode 中最后访问时间的更新,从而避免一些磁盘查找。

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

将 NFS 与 MySQL 一起使用

在考虑是否将 NFS 与 MySQL 一起使用时,您应该谨慎。潜在问题因操作系统和 NFS 版本而异,包括以下内容:

  • 放置在 NFS 卷上的 MySQL 数据和日志文件被锁定且无法使用。如果 MySQL 的多个实例访问同一数据目录或 MySQL 由于断电等原因不当关闭,则可能会出现锁定问题。NFS 版本 4 通过引入咨询和基于租约的锁定解决了潜在的锁定问题。但是,不建议在 MySQL 实例之间共享数据目录。

  • 由于接收到的消息乱序或网络流量丢失而​​引入的数据不一致。为避免此问题,请将 TCP 与hard挂载 intr选项一起使用。

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

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

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