文档首页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF(US Ltr) - 39.9Mb
PDF(A4) - 40.0Mb
手册页(TGZ) - 258.5Kb
手册页(Zip) - 365.5Kb
Info(Gzip) - 4.0Mb
Info(Zip) - 4.0Mb


MySQL 8.4 参考手册  /  ...  /  MyISAM 键缓存

10.10.2 MyISAM 键缓存

为了最大程度地减少磁盘 I/O,MyISAM 存储引擎利用了许多数据库管理系统采用的策略。它采用缓存机制,将最常访问的表块保留在内存中。

  • 对于索引块,维护一个名为 键缓存(或 键缓冲区)的特殊结构。该结构包含多个块缓冲区,其中放置了使用最频繁的索引块。

  • 对于数据块,MySQL 不使用任何特殊缓存。相反,它依赖于本机操作系统文件系统缓存。

本节首先介绍 MyISAM 键缓存的基本操作。然后介绍一些增强键缓存性能并允许您更好地控制缓存操作的功能。

  • 多个会话可以并发访问缓存。

  • 您可以设置多个键缓存,并将表索引分配到特定的缓存。

要控制键缓存的大小,请使用 key_buffer_size 系统变量。如果将此变量设置为零,则不使用键缓存。如果 key_buffer_size 值太小而无法分配最少的块缓冲区数量(8),则也不使用键缓存。

当键缓存不可用时,索引文件仅使用操作系统提供的本机文件系统缓冲来访问。(换句话说,表索引块使用与表数据块相同的策略访问。)

索引块是访问 MyISAM 索引文件的连续单元。通常,索引块的大小等于索引 B 树节点的大小。(索引在磁盘上使用 B 树数据结构表示。树底部的节点是叶子节点。叶子节点上方的节点是非叶子节点。)

键缓存结构中的所有块缓冲区大小相同。此大小可以等于、大于或小于表索引块的大小。通常这两个值之一是另一个值的倍数。

当必须访问任何表索引块中的数据时,服务器首先检查它是否在键缓存的某个块缓冲区中可用。如果可用,服务器访问键缓存中的数据,而不是磁盘上的数据。也就是说,它从缓存中读取或写入缓存,而不是从磁盘中读取或写入磁盘。否则,服务器选择包含不同表索引块(或块)的缓存块缓冲区,并用所需表索引块的副本替换那里的数据。一旦新的索引块进入缓存,就可以访问索引数据。

如果碰巧选择的要替换的块已被修改,则该块被认为是 脏的。 在这种情况下,在替换之前,会将它的内容刷新到它来源的表索引中。

通常,服务器遵循 LRU(最近最少使用) 策略:在选择要替换的块时,它选择最近最少使用的索引块。为了使此选择更容易,键缓存模块维护一个按使用时间排序的特殊列表 (LRU 链) 中的所有已使用块。当访问块时,它是最最近使用的,并被放置在列表的末尾。当需要替换块时,列表开头的块是最最近最少使用的,成为第一个被驱逐的候选者。

InnoDB 存储引擎也使用 LRU 算法来管理它的缓冲池。请参见 第 17.5.1 节,“缓冲池”.