mysql数据库中,key_buffer_size是对MYISAM表性能影响最大的参数。
下面以MYISAM为主要存储引擎服务器的配置:
MariaDB [(none)]> show variables like ‘key_buffer_size‘;
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| key_buffer_size | 134217728 |
+-----------------+-----------+
分配128M内存给key_buffer_size。
而key_buffer_size的使用情况:
MariaDB [(none)]> show global status like ‘key_read%‘;
+-------------------+--------+
| Variable_name | Value |
+-------------------+--------+
| Key_read_requests | 181043 |
| Key_reads | 29 |
+-------------------+--------+
一共181043个索引请求,有29个请求在内存中没有找到,直接从硬盘中读取索引
计算索引未命中缓存的概率:
key_cache_miss_rate = Key_reads / Key_read_requests * 100%
根据key_cache_miss_rate数据判断:>0.1%则要适当调大key_buffer_size的值;
<0.1%,>0.01% 适合 ;
<0.01% 分配的key_buffer_size过大,浪费,适当调小。
key_blocks_*参数
MariaDB [(none)]> show global status like ‘key_blocks_u%‘;
+-------------------+--------+
| Variable_name | Value |
+-------------------+--------+
| Key_blocks_unused | 107170 |
| Key_blocks_used | 1 |
+-------------------+--------+
key_blocks_unused表示从未被使用到的内存簇,就算曾经分配最大内存时,也还剩余的量。若为0,则表示最大使用时key_buffer全部使用;
key_blocks_used表示曾经使用到的最大的blocks
比较理想的设置:
Key_blocks_used / (Key_blocks_unused + Key_blocks_used) * 100% ≈ 80%