Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Optimizing InnoDB Configuration Variables

10.5.9 优化InnoDB配置变量

不同的设置适合于服务器轻负载、可预测的负载,或者服务器总是运行在满负载或经历高活动的尖峰。

因为InnoDB存储引擎自动执行许多优化,因此许多性能调整任务涉及监控以确保数据库性能良好,并在性能下降时更改配置选项。请参阅第17.16节,“InnoDB与MySQL性能架构集成”,了解详细的InnoDB性能监控信息。

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

  • 控制InnoDB缓冲更改数据的类型,以避免频繁的小磁盘写入。请参阅配置更改缓冲。因为默认情况下缓冲所有类型的数据更改操作,只有在需要减少缓冲量时才更改此设置。

  • 使用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中引入的优化加速了崩溃恢复过程中的某些步骤。特别是扫描redo log和应用redo log的算法已经改进,用于内存管理。如果您曾经将日志文件保持小以避免长启动时间,现在可以考虑增加日志文件大小,以减少redo log记录回收时的I/O。

  • 为大型缓冲池系统配置 InnoDB 缓冲池的大小和实例数,特别是对于具有多GB缓冲池的系统。见 第 17.8.3.2 节,“配置多个缓冲池实例”

  • 增加最大并发事务数,这大大提高了最繁忙数据库的可扩展性。见 第 17.6.6 节,“撤销日志”

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

  • 减少 InnoDB 在并发线程之间的切换,以便在繁忙服务器上 SQL 操作不排队并形成 交通拥堵。设置 innodb_thread_concurrency 选项的值,高达大约 32 个现代高性能系统。增加 innodb_concurrency_tickets 选项的值,通常为 5000 左右。这组选项设置了 InnoDB 在任何时候处理的线程数上限,并允许每个线程执行大量工作,然后被交换出去,以便等待线程的数量保持低水平,操作可以完成而不需要过多的上下文切换。