• key_buffer_size

    命令行格式--key-buffer-size=#
    系统变量key_buffer_size
    范围全球的
    动态的是的
    类型整数
    默认值8388608
    最小值8
    最大值(64 位平台)OS_PER_PROCESS_LIMIT
    最大值(32 位平台)4294967295

    MyISAM表的 索引块被缓冲并由所有线程共享。 key_buffer_size是用于索引块的缓冲区的大小。密钥缓冲区也称为密钥缓存。

    key_buffer_size在 32 位平台上 允许的最大设置为 4GB-1。64 位平台允许使用更大的值。有效的最大大小可能更小,具体取决于操作系统或硬件平台施加的可用物理 RAM 和每个进程的 RAM 限制。此变量的值表示请求的内存量。在内部,服务器分配尽可能多的内存,最多可达此数量,但实际分配可能更少。

    您可以增加该值以获得更好的所有读取和多次写入的索引处理;在主要功能是使用 MySQL 运行 MySQL 的系统上 MyISAM存储引擎,机器总内存的 25% 是此变量的可接受值。但是,您应该注意,如果您将该值设置得太大(例如,超过机器总内存的 50%),您的系统可能会开始分页并变得极其缓慢。这是因为 MySQL 依赖操作系统对数据读取进行文件系统缓存,所以必须为文件系统缓存留出一些空间。您还应该考虑除 MyISAM.

    为了在同时写入多行时获得更高的速度,请使用LOCK TABLES. 请参阅 第 8.2.4.1 节,“优化 INSERT 语句”

    您可以通过发出检查键值缓冲区的性能 SHOW STATUS声明和检查 Key_read_requests, Key_reads, Key_write_requests,和 Key_writes状态变量。(请参阅第 13.7.5 节,“SHOW 语句”。)该 Key_reads/Key_read_requests比率通常应小于 0.01。Key_writes/Key_write_requests如果您主要使用更新和删除,则该比率通常接近 1,但如果您倾向于同时执行影响多行的更新,或者使用DELAY_KEY_WRITE表选项,则该 比率可能会小得多 。

    可以key_buffer_size结合 Key_blocks_unused状态变量和缓冲区块大小(可从key_cache_block_size 系统变量获得)来确定正在使用的密钥缓冲区的比例 :

    <span style="background-color:#f8f8f8"><span style="color:#000000"><code class="language-simple">1 <span style="color:#a67f59">-</span> <span style="color:#999999">(</span><span style="color:#999999">(</span>Key_blocks_unused <span style="color:#a67f59">*</span> key_cache_block_size<span style="color:#999999">)</span> <span style="color:#a67f59">/</span> key_buffer_size<span style="color:#999999">)</span></code></span></span>

    该值是一个近似值,因为密钥缓冲区中的一些空间是在内部为管理结构分配的。影响这些结构的开销量的因素包括块大小和指针大小。随着块大小的增加,因开销而丢失的密钥缓冲区的百分比趋于降低。较大的块导致较少数量的读取操作(因为每次读取获得更多的键),但相反,未检查的键的读取会增加(如果不是块中的所有键都与查询相关)。

    可以创建多个MyISAM 密钥缓存。4GB 的大小限制单独应用于每个缓存,而不是作为一个组。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐