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 InnoDB Configuration Variables

10.5.9 Optimizing InnoDB 配置变量

不同的设置对于负载轻、预测可靠的服务器和总是运行接近满负荷或经常遇到高活动峰值的服务器效果最佳。

由于 InnoDB 存储引擎自动执行许多优化,很多性能调优任务涉及监控以确保数据库运行良好,并在性能下降时更改配置选项。有关详细 InnoDB 性能监控的信息,请参阅第 17.16 节,“InnoDB 与 MySQL 性能 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 配置旋转锁定轮询”

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

  • 调整日志文件大小,以适应可靠性和崩溃恢复的需求。 InnoDB 日志文件通常被保持在较小的大小以避免崩溃后启动时间长。MySQL 5.5 引入的优化加快了某些崩溃恢复步骤,尤其是扫描日志和应用日志的速度,因为改进了内存管理算法。如果您为了避免长启动时间而保持日志文件小,您现在可以考虑增加日志文件大小,以减少由于回收redo日志记录而发生的I/O。

  • 配置InnoDB缓冲池的大小和实例数量,对于拥有多达数十亿字节缓冲池的系统尤其重要。请参阅第17.8.3.2节,“配置多个缓冲池实例”

  • 增加并发事务的最大数量,这样可以显著提高 busiest 数据库的可扩展性。请参阅第17.6.6节,“Undo日志”

  • 将清理操作(一种垃圾回收)移动到后台线程中。请参阅第17.8.9节,“清理配置”。为了有效地衡量这个设置的结果,首先调整其他I/O相关和线程相关的配置设置。

  • 减少InnoDB在并发线程之间切换的次数,以避免忙碌服务器上的SQL操作形成排队。为innodb_thread_concurrency选项设置一个值,直到大约32个高性能现代系统。在innodb_concurrency_tickets选项上增加值,通常为5000左右。这对InnoDB设置了一个线程处理的最大数量限制,并允许每个线程在被交换出之前完成大量工作,以保持等待线程的低数和操作不受过多上下文切换影响。