MySQL OCP888题解058-MyISAM Key Buffer

1、原题

1.1、英文原题

Consider the key buffer in a MySQL server. Which two statements are true about this feature?
A、It caches index blocks for MyISAM tables only.
B、It caches index blocks for all storage engine tables.
C、It is a global buffer.
D、It is set on a per-connection basis.
E、It caches index blocks for InnoDB tables only.

1.2、中文翻译

考虑MySQL服务器中的key buffer。关于这个功能,哪两种说法是正确的?
A、 它只缓存MyISAM表的索引块。
B、 它缓存所有存储引擎表的索引块。
C、 它是一个全局缓冲区。
D、 它是在每个连接的基础上设置的。
E、 它只为InnoDB表缓存索引块。

1.3、答案

A、C

2、题目解析

2.1、题干解析

本题考察MySQL的MyISAM引擎的Key Buffer相关知识。

2.2、选项解析

  1. Key Buffer只缓存MyISAM表的索引块,不缓存数据块,是全局缓存,所以选项A和C正确。

3、知识点

3.1、知识点1:MyISAM Key Buffer

3.1.1、MyISAM Key Buffer

  • 为了尽量减少磁盘I/O,MyISAM存储引擎将访问频率高的索引块保存在key buffer中,由所有线程共享。key buffer不缓存数据块,对于数据库的缓存MyISAM依赖于本地操作系统的文件系统缓存。
  • 当必须访问任何表索引块的数据时,服务器首先检查它是否在key buffer的某个块缓冲区中可用。如果是的话,服务器会访问key buffer中的数据,而不是磁盘上的数据。否则,服务器会将所需的表索引块加载到key buffer。如果一个被选中替换的区块被修改了,那么这个区块就被认为是 "脏 "的。在这种情况下,在被替换之前,它的内容会被刷新到它所在的表的索引中。服务器遵循LRU(最近使用最少的)策略。当选择一个块进行替换时,它选择最近使用最少的索引块。

官方参考文档

3.1.2、key_buffer_size系统变量

  • key_buffer_size用于key buffer的大小。key_buffer_size只能以4096字节的增量或倍数来增加或减少。
  • 允许的最小设置是0,但是你不能把key_buffer_size动态地设置为0。设置为0会丢掉密钥缓冲区,这在运行时是不允许的。将key_buffer_size设置为0只在启动时允许。在运行时将key_buffer_size设置从0值改为允许的非零值,可以初始化密钥缓存。
  • 可以增加这个值,以获得对所有读取和多次写入的更好的索引处理;在一个主要功能是使用MyISAM存储引擎运行MySQL的系统上,机器总内存的25%是这个变量的一个可接受值。然而如果你使这个值过大(例如,超过机器总内存的50%),你的系统可能开始分页,变得极其缓慢。

官方参考文档

4、总结

  1. Key Buffer是MyISAM引擎专用的缓冲区,用于缓冲MyISAM表的索引块,不缓存表的数据块。Key Buffer由所有线程共享。
  2. key_buffer_size在启动时可以设置为0,但在运行时不能动态设置为0,否则会丢失密钥缓冲。key_buffer_size的值应设置为4096字节的倍数,最大一般不要超过所在服务器内存的25%。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值