文档首页
MySQL 9.0 参考手册
相关文档 下载此手册

MySQL 9.0 参考手册  /  ...  /  优化 InnoDB 配置变量

10.5.9 优化 InnoDB 配置变量

不同的设置对于负载轻、可预测的服务器,以及始终处于满负荷运行或遇到高活动峰值的服务器,最适合。

由于 InnoDB 存储引擎会自动执行许多优化,因此许多性能调整任务都涉及监控以确保数据库的正常运行,并在性能下降时更改配置选项。有关详细的 InnoDB 性能监控信息,请参见 第 17.16 节,“InnoDB 与 MySQL Performance Schema 集成”

您可以执行的主要配置步骤包括

  • 控制 InnoDB 缓冲更改数据的类型,以避免频繁的小磁盘写入。请参见 配置更改缓冲。启用更改缓冲可以在 IO 绑定工作负载中获得更好的性能,但在恢复、批量加载或缓冲池调整大小期间可能会导致问题。将其禁用(从 MySQL 8.4 开始默认禁用)有助于确保稳定性,即使它可能降低性能。

  • 使用 innodb_adaptive_hash_index 选项启用或禁用自适应哈希索引功能。有关更多信息,请参见 第 17.5.3 节,“自适应哈希索引”。您可以在非正常活动期间更改此设置,然后将其恢复为原始设置。

  • 如果上下文切换是瓶颈,则设置 InnoDB 处理的并发线程数的限制。请参见 第 17.8.4 节,“为 InnoDB 配置线程并发”

  • 控制 InnoDB 在其预读操作中执行的预取数量。当系统具有未使用的 I/O 容量时,更多预读可以提高查询性能。在负载很重的系统上,预读过多会导致性能周期性下降。请参见 第 17.8.3.4 节,“配置 InnoDB 缓冲池预取(预读)”

  • 如果您的高性能 I/O 子系统没有被默认值完全利用,则可以增加用于读取或写入操作的后台线程数。请参见 第 17.8.5 节,“配置后台 InnoDB I/O 线程的数量”

  • 控制 InnoDB 在后台执行的 I/O 数量。请参见 第 17.8.7 节,“配置 InnoDB I/O 容量”。如果您观察到性能周期性下降,则可以缩减此设置。

  • 控制确定 InnoDB 何时执行某些类型后台写入的算法。请参见 第 17.8.3.5 节,“配置缓冲池刷新”。该算法适用于某些类型的工作负载,但不适用于其他工作负载,因此,如果您观察到性能周期性下降,则可以禁用此功能。

  • 利用多核处理器及其缓存内存配置,以最大程度地减少上下文切换的延迟。请参见 第 17.8.8 节,“配置自旋锁轮询”

  • 阻止一次性操作(如表扫描)干扰存储在 InnoDB 缓冲缓存中的频繁访问数据。请参见 第 17.8.3.3 节,“使缓冲池抵抗扫描”

  • 调整日志文件大小,以满足可靠性和崩溃恢复的需求。 InnoDB 日志文件通常保持较小,以避免崩溃后长时间启动。MySQL 5.5 中引入的优化加速了崩溃 恢复 过程中的某些步骤。特别是,由于内存管理算法的改进,扫描 重做日志 和应用重做日志的速度更快。如果您一直将日志文件人为地保持较小以避免长时间启动,现在可以考虑增加日志文件大小,以减少由于重做日志记录循环利用而发生的 I/O 操作。

  • 配置 InnoDB 缓冲池的大小和实例数量,这对具有多吉字节缓冲池的系统尤其重要。请参见 第 17.8.3.2 节,“配置多个缓冲池实例”

  • 增加并发事务的最大数量,这将极大地提高最繁忙数据库的可扩展性。请参见 第 17.6.6 节,“撤消日志”

  • 将清除操作(一种垃圾回收类型)移到后台线程中。请参见 第 17.8.9 节,“清除配置”。要有效地衡量此设置的结果,请先调整其他与 I/O 相关和与线程相关的配置设置。

  • 减少 InnoDB 在并发线程之间切换的次数,这样繁忙服务器上的 SQL 操作就不会排队形成 交通堵塞。为 innodb_thread_concurrency 选项设置一个值,对于高性能的现代系统,该值大约为 32。增加 innodb_concurrency_tickets 选项的值,通常设置为 5000 左右。此选项组合限制了 InnoDB 同时处理的线程数量,并允许每个线程在被换出之前执行大量工作,这样等待线程的数量保持较低,操作可以在不进行过度上下文切换的情况下完成。