Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  Optimizing Disk I/O

10.12.1 优化磁盘 I/O

本节描述了如何配置存储设备,以便将更多和更快的存储硬件分配给数据库服务器。关于优化 InnoDB 配置以提高 I/O 性能,请参阅第10.5.8节,“优化 InnoDB 磁盘 I/O”

  • 磁盘寻找是性能瓶颈之一。随着数据量的增长,这个问题变得更加明显。在大型数据库中,您访问数据更多或更少时,可以确定需要至少一个磁盘寻找来读取和几个磁盘寻找来写入东西。为了减少这个问题,使用低寻找时间的磁盘。

  • 增加可用磁盘 spindle 的数量(并且减少寻找延迟)可以通过 either symlinking 文件到不同的磁盘或磁盘条带化:

    • 使用符号链接

      这意味着,对于 MyISAM 表,您将索引文件和数据文件从通常的数据目录 symlink 到另一个磁盘(可能也被条带化)。这样,寻找和读取时间都变得更好,假设磁盘不用于其他目的。请参阅第10.12.2节,“使用符号链接”

      符号链接不支持与 InnoDB 表的使用。然而,可以将 InnoDB 数据和日志文件放在不同的物理磁盘上。更多信息,请参阅第10.5.8节,“优化 InnoDB 磁盘 I/O”

    • 剪切

      剪切意味着你有多个磁盘,首先将第一个块写入第一个磁盘,第二个块写入第二个磁盘,以此类推,直到第N块写入(N MOD number_of_disks)磁盘等。这样,如果你的正常数据大小小于 stripe 大小(或完全对齐),你将获得很好的性能。剪切非常依赖操作系统和 stripe 大小,所以在不同的 stripe 大小下测试应用程序。见第10.13.2节,“使用自定义基准”

      剪切速度差异对参数非常依赖。根据你设置的剪切参数和磁盘数量,你可能会获得几个数量级的差别。你需要选择优化随机或顺序访问。

  • 为了可靠性,你可能想使用 RAID 0+1(剪切加镜像),但是,在这种情况下,你需要N个磁盘来存储N个数据。这可能是如果你有足够资金的最佳选择。然而,你也需要投资一些卷管理软件来高效地处理它。

  • 一个好的选择是根据数据类型的重要性来变更 RAID 等级。例如,存储可以重生成的半重要数据到 RAID 0 磁盘,但将非常重要的数据,如主机信息和日志存储到 RAID 0+1 或 RAID N 磁盘。 RAID N 可能会在你有很多写入时成为问题,因为更新校验位需要时间。

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

    如果您不需要知道文件最后访问时间(在数据库服务器上实际上并不是很有用),那么可以使用-o noatime选项将文件系统挂载。这样可以跳过inode的最后访问时间更新,避免一些磁盘寻道。

    在许多操作系统上,您可以使用-o async选项将文件系统挂载为异步更新。如果您的计算机稳定性较高,这应该会给您带来更好的性能而不太损失可靠性。(这个标志默认开启在Linux上。)

您应该小心考虑是否使用NFS与MySQL。可能的问题,取决于操作系统和NFS版本,包括以下几点:

  • MySQL数据和日志文件在NFS卷上变为锁定且不可用。锁定问题可能出现在多个MySQL实例访问同一个数据目录或MySQL不正常关闭,例如因电源故障等情况。NFS版本4解决了锁定问题,引入了建议性锁定和租约锁定。但是,共享数据目录中的MySQL实例不是推荐的。

  • 由于消息乱序或网络流量丢失引入数据不一致。为了避免这个问题,使用TCP并且hardintr挂载选项。

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

在专业SAN环境或其他存储系统中使用NFS通常比在这种环境外部使用NFS更可靠。然而,在SAN环境中使用NFS可能比直接连接或总线连接非旋转存储慢。

如果您选择使用NFS,建议使用NFS版本4或更高版本,并且在生产环境部署前充分测试您的NFS设置。