文章目录
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、选项解析
- 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、总结
- Key Buffer是MyISAM引擎专用的缓冲区,用于缓冲MyISAM表的索引块,不缓存表的数据块。Key Buffer由所有线程共享。
- key_buffer_size在启动时可以设置为0,但在运行时不能动态设置为0,否则会丢失密钥缓冲。key_buffer_size的值应设置为4096字节的倍数,最大一般不要超过所在服务器内存的25%。