10bet网址
MySQL 5.7参考手册
相关的文档10bet官方网站 下载本手册
PDF(美国高级主任)- 36.3 mb
PDF (A4)- 36.3 mb
手册页(TGZ)- 235.4 kb
手册页(Zip)- 347.1 kb
信息(Gzip)- 3.3 mb
信息(邮政编码)- 3.3 mb
本手册节选

8.5.8优化InnoDB磁盘I/O

如果您遵循数据库设计和SQL操作调优技术的最佳实践,但由于磁盘I/O活动较多,数据库仍然很慢,请考虑这些磁盘I/O优化。如果Unix工具或Windows任务管理器显示您的工作负载的CPU使用率低于70%,您的工作负载可能是磁盘绑定的。

  • 增加缓冲池大小

    中缓存表数据时InnoDB缓冲池,它可以被查询重复访问,而不需要任何磁盘I/O。属性指定缓冲池的大小通过innodb_buffer_pool_size选择。这个内存区域非常重要,通常建议通过innodb_buffer_pool_size配置为系统内存的50%到75%。欲了解更多信息,章节8.12.4.1,“MySQL如何使用内存”

  • 调整冲洗方法

    在某些版本的GNU/Linux和Unix中,使用Unixfsync ()电话(InnoDB默认使用)和类似的方法非常慢。如果数据库写入性能存在问题,请使用innodb_flush_method参数设置为O_DSYNC

  • 在Linux上使用本机AIO的noop或deadline I/O调度器

    InnoDB使用Linux上的异步I/O子系统(本机AIO)对数据文件页执行预读和写请求。控件控制此行为innodb_use_native_aio配置选项,默认启用。对于本机AIO, I/O调度器的类型对I/O性能的影响更大。通常,建议使用noop和deadline I/O调度器。执行基准测试,以确定哪个I/O调度器为您的工作负载和环境提供了最佳结果。有关更多信息,请参见第14.8.7节“在Linux上使用异步I/O”

  • 对于x86_64架构,在Solaris 10上使用直接I/O

    当使用InnoDB存储引擎在Solaris 10上的x86_64架构(AMD Opteron),使用直接I/OInnoDB相关文件,以避免降级InnoDB的性能。对用于存储的整个UFS文件系统使用直接I/OInnoDB相关文件,使用forcedirectio选择;看到mount_ufs(1米).(Solaris 10/x86_64上的默认值是使用此选项。)将直接I/O仅应用于InnoDB文件操作而不是整个文件系统,设置innodb_flush_method = O_DIRECT.有了这个设置,InnoDB调用译:()而不是fcntl ()用于数据文件的I/O(不用于日志文件的I/O)。

  • 对于Solaris 2.6或更高版本的数据和日志文件使用原始存储

    当使用InnoDB存储引擎用的很大通过innodb_buffer_pool_size在任何Solaris 2.6及以上版本和任何平台(sparc/x86/x64/amd64)上执行基准测试InnoDB数据文件和日志文件在原始设备或单独的直接I/O UFS文件系统上,使用forcedirectio挂载选项,如前所述。(使用mount选项而不是设置是必要的innodb_flush_method如果你想直接I/O日志文件。)Veritas文件系统VxFS的用户应该使用convosync =直接挂载选项。

    不放置其他MySQL数据文件,如MyISAM表,在一个直接I/O文件系统。可执行文件或库不得被放置在直接I/O文件系统上。

  • 使用额外的存储设备

    可以使用其他存储设备来设置RAID配置。相关信息请参见第8.12.2节“优化磁盘I/O”

    另外,InnoDB表空间数据文件和日志文件可以放置在不同的物理磁盘上。欲了解更多信息,请参阅以下部分:

  • 考虑非旋转存储

    非旋转存储通常为随机I/O操作提供更好的性能;以及用于顺序I/O操作的旋转存储。当在旋转和非旋转存储设备上分布数据和日志文件时,请考虑主要在每个文件上执行的I/O操作类型。

    随机面向I/ o的文件通常包括file-per-table而且一般的表空间数据文件,撤消表空间文件,临时表空间文件。面向I/ o的顺序文件包括InnoDB系统表空间档案(由于doublewrite缓冲而且改变缓冲)和日志文件,例如二进制日志文件和重做日志文件。

    使用非旋转存储时,检查以下配置选项的设置:

    • innodb_checksum_algorithm

      crc32Option使用更快的校验和算法,推荐用于快速存储系统。

    • innodb_flush_neighbors

      优化存储设备的I/O。对于非旋转存储或混合使用旋转和非旋转存储禁用它。

    • innodb_io_capacity

      对于低端的非旋转存储设备,默认设置为200就足够了。对于高端的总线连接设备,可以考虑更高的设置,例如1000。

    • innodb_io_capacity_max

      缺省值2000用于使用非旋转存储的工作负载。对于高端总线连接的非旋转存储设备,请考虑设置较高的值,例如2500。

    • innodb_log_compressed_pages

      如果重做日志位于非循环存储上,请考虑禁用此选项以减少日志记录。看到禁用压缩页面的日志记录

    • innodb_log_file_size

      如果重做日志位于非旋转存储上,则配置此选项以最大化缓存和写入组合。

    • innodb_page_size

      考虑使用与磁盘内部扇区大小相匹配的页大小。早期SSD设备的扇区大小通常为4KB。一些较新的设备扇区大小为16KB。默认的InnoDB页面大小为16KB。保持页面大小接近存储设备块大小可以最小化重写到磁盘的未更改数据量。

    • binlog_row_image

      如果二进制日志在非旋转存储上,并且所有表都有主键,请考虑将此选项设置为最小的减少伐木。

    确保您的操作系统启用了TRIM支持。默认情况下,它通常是启用的。

  • 增加I/O容量以避免积压

    如果吞吐量周期性下降,因为InnoDB检查点操作时,考虑增加值innodb_io_capacity配置选项。数值越高,频率越高冲洗,避免了可能导致吞吐量下降的工作积压。

  • 如果刷新不落后,则降低I/O容量

    如果系统没有落后InnoDB冲洗操作时,考虑降低值innodb_io_capacity配置选项。通常情况下,您可以将这个选项值保持得尽可能低,但又不能低到导致前面提到的吞吐量周期性下降的程度。在一个可以降低选项值的典型场景中,您可能会在输出中看到这样的组合显示引擎innodb状态

    • 历史名单长度低,在几千以下。

    • 插入缓冲区在插入行的附近合并。

    • 在缓冲池中修改的页面始终低于innodb_max_dirty_pages_pct缓冲池的。(在服务器不进行批量插入时进行测量;在批量插入期间,修改的页面百分比显著上升是正常的。)

    • 日志序列号-最后一个检查点是小于7/8还是理想情况下小于总尺寸的6/8InnoDB日志文件

  • 在Fusion-io设备上存放系统表空间文件

    通过存储系统表空间文件,您可以利用doublewrite缓冲区相关的I/O优化(ibdata文件)安装在支持原子写操作的Fusion-io设备上。在这种情况下,doublewrite缓冲(innodb_doublewrite)自动禁用,所有数据文件使用Fusion-io原子写。该特性仅在Fusion-io硬件上支持,且仅在Linux下的Fusion-io NVMFS上启用。为了充分利用这一特性,一个innodb_flush_method设置O_DIRECT建议。

    请注意

    由于doublewrite缓冲区设置是全局的,因此对于驻留在非fusion -io硬件上的数据文件也禁用doublewrite缓冲区。

  • 禁用压缩页面的日志记录

    当使用InnoDB表格压缩功能,图像重新压缩页面都被写入重做日志当对压缩数据进行更改时。此行为由innodb_log_compressed_pages的不同版本时,该选项默认启用,以防止可能发生的损坏zlib恢复时使用压缩算法。如果你确定zlib版本不可更改,禁用innodb_log_compressed_pages为修改压缩数据的工作负载减少重做日志的生成。