key_buffer_size - xiaoboluo768/qianjinliangfang GitHub Wiki
- MyISAM表的索引块缓冲大小(MyISAM只能缓存索引,数据需要依赖文件系统层缓存),该缓冲块(默认的key buffer)可以被所有线程共享, key buffer也叫做key cache
- key_buffer_size的最大有效值在32位平台上为4GB-1字节,在64位平台上最大值依赖于操作系统、单个进程允许最大值、硬件数量的限制,该变量给定的值只代表一个最大阀值,并不是mysql进程启动时就占用设定的内存大小,所以,用于key buffer的实际内存大小通常会少于该变量设定的大小
- 在大量使用MyISAM引擎的MySQL实例中,您可以通过增加该变量值来提高索引访问在key buffer中的读写命中率进而提高表访问效率,但最大值不建议超过物理内存的25%,如果您的值太大(例如,超过物理内存的50%,操作系统中的 内存页操作可能会变得非常慢。因为MyISAM引擎依靠操作系统的文件系统缓存来进行表数据行读,所以需要为文件系统缓存保留一些内存空间)。除了MyISAM引擎使用的key buffer之外,还应该考虑任何其他存储引擎的内存使用要求
- 您可以通过SHOW STATUS语句查看状态变量Key_read_requests,Key_reads,Key_write_requests和Key_writes的值来判断key buffer的性能(使用率)。Key_reads/Key_read_requests的比例通常应小于0.01。如果您主要业务是更新和删除,则Key_writes/Key_write_requests比例应该接近1,但你的业务主要是更新或者使用DELAY_KEY_WRITE表选项,则该比值可能会小一些
- 可以使用系统变量key_buffer_size和key_cache_block_size结合状态变量Key_blocks_unused来计算key buffer的使用率:1-((Key_blocks_unused*key_cache_block_size)/key_buffer_size),该值是一个近似值,因为key buffer中的一些空间会被内部分配给管理结构使用。例如:块大小和指针大小的管理结构数据。随着块大小的增加,key buffer的命中率可能会降低。更大的块会导致更少的读取操作数(因为每个读取操作一次性可以获得更多的key)
- 可以创建多个MyISAM key buffer,每个单独的key buffer大小限制为4GB,详见知识库文档《MyISAM内存优化》
- 全局变量,动态变量,整型值,32为平台取值范围为8
4294967295字节,默认值为8388608(8M),64位平台取值范围为8系统限制大小,默认值为8388608(8M)
上一篇:sql_slave_skip_counter | 下一篇:plugin_load