您现在的位置: 首页  > MySQL > 性能与优化
通行证登录
 

Mysql主要配置参数2:key_buffer_size 键缓冲_第2页

作者:[51ak ]

key_buffer_size被所有线程共享,严格说是它决定了数据库索引处理的速度,尤其是索引读的速度。那我们怎么才能知道key_buffer_size的设置是否合理呢,一般可以检查状态值Key_read_requests和Key_reads,比例key_reads / key_read_requests应该尽可能的低,比如1:100,1:1000 ,1:10000。其值可以用以下命令查得:
mysql> show status like 'key_read%';
+-------------------+------------+
| Variable_name     | Value      |
+-------------------+------------+
| Key_read_requests | 3916880184 |
| Key_reads         | 1014261    |
+-------------------+------------+
2 rows in set (0.00 sec)
3916880184/1024/1024=?M    //单位为兆
所以参考的key_buffer_size值为:
key_buffer_size=536870912/1024/1024=512M,
key_reads / key_read_requests=1014261: 3916880184≈1:4000,照上面来看,健康状况还行。

当MySQL执行某个利用了MyISAM数据表索引的语句的时候,它会使用键缓存来保持索引值。这种缓存减少了磁盘I/O:如果在缓存中找到了某个数据表需要的键值,就不需要再次从磁盘中读取。不幸的是,这种键缓存是有限的,并且在默认情况下,它是所有的MyISAM数据表共享使用的。如果在键缓存中没有找到键值并且键缓存是满的,争用将会导致:必须丢弃缓存中的某些值,为新值留出空间。如果下次需要那些已经被丢弃的值,就必须再次从磁盘上读取。
如果你很倚重MyISAM数据表,那么把它的键保存在内存中效果会很好,但是缓存中的争用却会导致相反的效果。从同一张表或不同的表读取数据都可能引起争用。你可以通过把键缓存设置成足以保存某个特定数据表的全部索引,从而避免同一张数据表的争用,但是其它数据表的键仍然需要争用缓存空间。