我们正在尝试调整我们正在忙碌的MySQL数据库(Myisam,5.1.73).
我们调查了Key_reads:
$mysqladmin ext -ri10 | grep Key_reads
在正常负载期间,我们有以下值(平均值):
Key_reads 40 (per 10 seconds)
Key_read_requests 350000 (per 10 seconds)
但有时候,在几十分钟内,我们会看到如下值:
Key_reads 1000 (per 10 seconds)
Key_read_requests 350000 (per 10 seconds)
我们将Key_buffer_size增加到512(比我们的索引总数大).我们还有16Gb的可用内存.
Key_reads应该是低还是空?
这些peacks是正常的还是可以避免的?
解决方法:
定义
首先,您需要知道这些状态变量的含义
> Key_read_requests:从MyISAM密钥缓存中读取密钥块的请求数.
> Key_reads:从磁盘到MyISAM密钥缓存的密钥块的物理读取次数.如果Key_reads很大,那么你的key_buffer_size值可能太小了.可以将高速缓存未命中率计算为Key_reads / Key_read_requests.
意见
从MyISAM密钥缓冲区读取的350000个磁盘中的40个读取磁盘的缓存命中率为100 X(1.0 – (40.0 / 350000.0))= 99.98857%.
从MyISAM密钥缓冲区读取的350000个磁盘中的1000个读取的缓存命中率为100 X(1.0 – (1000.0 / 350000.0))= 99.7143%.
>我之前讨论过性能调优的这个方面:How to improve MySQL Server Performance..??
推测
当您的Key_reads开始增加时,它只是表示您读取了新数据,并且访问的索引页面已被新加载到MyISAM密钥缓存中.这样的Key_reads是不可避免的.一旦该尖峰停止,则您的读取请求已大幅减少,或者后续查询现在使用您上次读入MyISAM密钥缓存的密钥块.高键读取表明您的查询经常从磁盘读取索引块,将它们加载到密钥缓存中,从MyISAM密钥缓存中删除索引块,后续查询不访问它们.
结论
由于您的缓存命中率(> 99.00%)非常出色,我会说您很好,因为您的Key_reads非常低并且不常见.
标签:mysql,myisam,tuning
来源: https://codeday.me/bug/20190806/1601520.html