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

8.10.2 MyISAM密钥缓存

为了最小化磁盘I/Omyisam.存储引擎利用了一种被许多数据库管理系统使用的策略。它采用了一个缓存机制,将最频繁访问的表块保存在内存中:

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

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

本节首先介绍了基本操作myisam.密钥缓存。然后它讨论了提高关键缓存性能的功能,使您能够更好地控制缓存操作:

  • 多个会话可以同时访问缓存。

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

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

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

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

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

当必须访问来自任何表索引块的数据时,服务器首先检查其密钥缓存的一些块缓冲区中是否可用。如果是,则服务器访问密钥高速缓存中的数据而不是磁盘。也就是说,它从缓存中读取或写入它而不是读取或写入磁盘。否则,服务器选择包含不同表索引块(或块)的缓存块缓冲区,并通过所需表索引块的副本替换该数据。一旦新索引块处于缓存中,就可以访问索引数据。

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

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

Innodb.存储引擎还使用LRU算法,管理其缓冲池。看第15.5.1节,“缓冲池”