不同的设置对于负载轻、可预测的服务器,以及始终处于满负荷运行或遇到高活动峰值的服务器,最适合。
由于 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
同时处理的线程数量,并允许每个线程在被换出之前执行大量工作,这样等待线程的数量保持较低,操作可以在不进行过度上下文切换的情况下完成。