• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 优化磁盘 I / O

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

    • 磁盘寻道是巨大的性能瓶颈。当数据量开始增长到无法进行有效缓存时,此问题将变得更加明显。对于大型数据库,您或多或少地随机访问数据,可以确保至少需要读取一个磁盘并要写一些磁盘。为了最小化此问题,请使用寻道时间短的磁盘。
    • 通过将文件符号链接到不同的磁盘或分割磁盘来增加可用磁盘心轴的数量(从而减少查找开销):

      • 使用符号链接

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

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

      • 分条

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

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

    • 为了提高可靠性,您可能需要使用RAID 0 + 1(条带化和镜像),但是在这种情况下,您需要2个N驱动器来保存N数据驱动器。如果您有足够的钱,这可能是最好的选择。但是,您可能还必须投资购买一些卷管理软件才能有效地处理它。
    • 一个不错的选择是根据数据类型的关键程度来改变RAID级别。例如,存储可以在RAID 0磁盘上重新生成的次要数据,但将真正重要的数据(例如主机信息和日志)存储在RAID 0 + 1或RAID N磁盘上。N如果您需要进行多次写入操作,则由于更新奇偶校验位所需的时间,RAID 可能会成为问题。
    • 您还可以为数据库使用的文件系统设置参数:

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

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

    在MySQL中使用NFS

    在考虑将NFS与MySQL一起使用时,建议谨慎。潜在问题因操作系统和NFS版本而异,包括:

    • 放置在NFS卷上的MySQL数据和日志文件已被锁定,无法使用。例如,在多个MySQL实例访问同一数据目录或由于断电而导致MySQL不正确关闭的情况下,可能会出现锁定问题。NFS版本4通过引入咨询和基于租赁的锁定解决了潜在的锁定问题。但是,不建议在MySQL实例之间共享数据目录。
    • 由于接收到的消息混乱或网络流量丢失而导致数据不一致。为避免此问题,请使用TCP和hardintr挂载选项。
    • 最大文件大小限制。NFS版本2客户端只能访问文件的最低2GB(带符号的32位偏移量)。NFS版本3客户端支持更大的文件(最大64位偏移)。支持的最大文件大小还取决于NFS服务器的本地文件系统。

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

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