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  /  MySQL 8.4 Frequently Asked Questions  /  MySQL 8.4 FAQ: InnoDB Change Buffer

A.16 MySQL 8.4 FAQ: InnoDB 更改缓冲区

A.16.1. 什么类型的操作修改辅助索引并导致更改缓冲区?
A.16.2. InnoDB 更改缓冲区的优点是什么?
A.16.3. 更改缓冲区是否支持其他类型的索引?
A.16.4. InnoDB 使用多少空间来存储更改缓冲区?
A.16.5. 如何确定当前更改缓冲区的大小?
A.16.6. 何时发生更改缓冲区合并?
A.16.7. 何时刷新更改缓冲区?
A.16.8. 何时应该使用更改缓冲区?
A.16.9. 何时不应该使用更改缓冲区?
A.16.10. 哪里可以找到关于更改缓冲区的更多信息?

A.16.1.

什么类型的操作修改辅助索引并导致更改缓冲区?

INSERTUPDATEDELETE 操作可以修改辅助索引。如果受影响的索引页不在缓冲池中,变化可以缓存在更改缓冲区中。

A.16.2.

InnoDB 更改缓冲区的优点是什么?

缓存辅助索引变化时,如果辅助索引页不在缓冲池中,可以避免昂贵的随机访问 I/O 操作,这些操作将被推迟到以后,以批量方式应用更改。当其他读取操作将页面读入缓冲池时,缓存的更改将被应用。

A.16.3.

更改缓冲区是否支持其他类型的索引?

否。更改缓冲区仅支持辅助索引。聚簇索引、全文索引和空间索引不受支持。全文索引具有自己的缓存机制。

A.16.4.

InnoDB 使用多少空间来存储更改缓冲区?

在 MySQL 5.6 之前,磁盘上更改缓冲区的最大大小是 InnoDB 缓冲池大小的 1/3。

在 MySQL 5.6 及更高版本中,innodb_change_buffer_max_size 配置选项定义了更改缓冲区的最大大小作为总缓冲池大小的百分比。默认情况下,innodb_change_buffer_max_size 设置为 25。最大设置为 50。

InnoDB 不会缓存操作,如果它会使磁盘上更改缓冲区超过定义的限制。

更改缓冲区页面不需要保留在缓冲池中,可以被 LRU 操作 evicted。

A.16.5.

如何确定当前更改缓冲区的大小?

当前更改缓冲区的大小由 SHOW ENGINE INNODB STATUS \G 报告,在 INSERT BUFFER AND ADAPTIVE HASH INDEX 部分。例如:

-------------------------------------
INSERT BUFFER AND ADAPTIVE HASH INDEX
-------------------------------------
Ibuf: size 1, free list len 0, seg size 2, 0 merges

相关数据点包括:

  • size:更改缓冲区中使用的页面数。更改缓冲区大小等于 seg size - (1 + free list len)1 + 值表示更改缓冲区头页。

  • seg size:更改缓冲区的大小,以页为单位。

有关监控更改缓冲区状态的信息,请参阅 第 17.5.2 节,“更改缓冲区”

A.16.6.

何时发生更改缓冲区合并?

  • 当页面读入缓冲池时,在读取完成之前,缓存的更改将被合并。

  • 更改缓冲区合并作为背景任务执行。innodb_io_capacity 参数设置了 InnoDB 背景任务(如合并数据从更改缓冲区)的 I/O 活动上限。

  • 在崩溃恢复期间,会执行更改缓冲区合并。更改将从更改缓冲区(在系统表空间中)应用到辅助索引的叶页上,当索引页读入缓冲池时。

  • 更改缓冲区是完全持久的,可以在系统崩溃后生存。在重新启动后,更改缓冲区合并操作将恢复正常操作。

  • 可以使用 --innodb-fast-shutdown=0 在服务器关闭时强制执行完整的更改缓冲区合并。

A.16.7.

何时刷新更改缓冲区?

更新的页面将通过与刷新缓冲池中的其他页面相同的机制刷新。

A.16.8.

何时使用更改缓冲区?

更改缓冲区是一个功能,旨在减少随机 I/O 到辅助索引,因为索引增长得很大,不再适合 InnoDB 缓冲池。一般来说,应该在整个数据集不适合缓冲池、存在大量 DML 活动修改辅助索引页或存在许多经常更改的辅助索引时使用更改缓冲区。

A.16.9.

何时不使用更改缓冲区?

如果整个数据集适合InnoDB缓冲池,您可能需要考虑禁用更改缓冲区,或者如果您只有少量次要索引,或者如果您使用固态存储设备,在这种情况下随机读取速度与顺序读取速度相似。在进行配置更改之前,建议您使用代表性工作负载运行测试,以确定禁用更改缓冲区是否提供任何益处。

A.16.10.

哪里可以找到关于更改缓冲区的更多信息?

请参阅 第 17.5.2 节,“更改缓冲区”