10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 本手册下载 本手册节选

8.10.2 MyISAM密钥缓存

要最小化磁盘I/O,可以使用MyISAM存储引擎采用了许多数据库管理系统都使用的策略。它使用一种缓存机制来将最频繁访问的表块保存在内存中:

  • 对于索引块,有一个特殊的结构称为键缓存(或关键缓冲)是维护。该结构包含许多块缓冲区,其中放置了最常用的索引块。

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

本节首先介绍的基本操作MyISAM关键的缓存。然后讨论提高关键缓存性能的特性,使您能够更好地控制缓存操作:

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

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

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

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

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

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

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

如果选择替换的块被修改了,则会考虑该块脏了。在这种情况下,在被替换之前,它的内容被刷新到它来自的表索引。

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

InnoDB存储引擎也使用LRU算法来管理它的缓冲池。看到第15.5.1节“缓冲池”