不同的设置适合于服务器轻负载、可预测的负载,或者服务器总是运行在满负载或经历高活动的尖峰。
因为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
在任何时候处理的线程数上限,并允许每个线程执行大量工作,然后被交换出去,以便等待线程的数量保持低水平,操作可以完成而不需要过多的上下文切换。