网上看到文章,说是命中率应该用 Qcache_hits/Com_select
所以我写了如下shell脚本:
#!/bin/sh
qcache_hits=`mysql -u$1 -p$2 -e "show global status like 'Qcache_hits'" | grep Qcache_hits | awk '{print $2}'`
com_select=`mysql -u$1 -p$2 -e "show global status like 'Com_select'" | grep Com_select | awk '{print $2}'`
echo $qcache_hits
echo $com_select
expr $qcache_hits / $com_select但是其结果总是Qcache_hits的值大于Com_select的值.
如:
9188571
4915624
1这样的计算方法对吗?
所以我写了如下shell脚本:
#!/bin/sh
qcache_hits=`mysql -u$1 -p$2 -e "show global status like 'Qcache_hits'" | grep Qcache_hits | awk '{print $2}'`
com_select=`mysql -u$1 -p$2 -e "show global status like 'Com_select'" | grep Com_select | awk '{print $2}'`
echo $qcache_hits
echo $com_select
expr $qcache_hits / $com_select但是其结果总是Qcache_hits的值大于Com_select的值.
如:
9188571
4915624
1这样的计算方法对吗?
mysql> show status like 'Qcache%';
这里面你主要参考Qcache hits和Qcache lowmem prunes两项的值
然后结合
update和delete这些操作的次数,来综合分析QUERY CACHE是否合理。一般来说,update和delete操作频繁的系统,不适宜将query cache过大,否则,造成query cache管理频繁而影响性能,其中的原理是因为进行update和delete时,会将涉及到对应数据的SQL从query cache里面清理出去的。
嗯,确实,系统的update比较频繁!
按照mysql清理算法,insert会影响query cache里的数据吗? 我的系统insert操作更大!
如果按query cache的管理原理,那你的query cache不应该设置太大
qcache_hits=`mysql -u$1 -p$2 -e "show global status like 'Qcache_inserts'" | grep Qcache_inserts | awk '{print $2}'`
qcache_inserts=`mysql -u$1 -p$2 -e "show global status like 'Qcache_hits'" | grep Qcache_hits | awk '{print $2}'`
com_select=`mysql -u$1 -p$2 -e "show global status like 'Com_select'" | grep Com_select | awk '{print $2}'`
echo Qcache_hits: $qcache_hits
echo Qcache_inserts: $qcache_inserts
echo Com_select: $com_select
echo "scale=2; ($qcache_inserts - $qcache_hits) / $com_select" | bc
也是可以的哦
Qcache_inserts : 多少次未命中然后插入的.
Qcache_hits : 多少次命中的.
这样计算到我的系统qcache的命中率应该为 %34,这个性能就很差了,应该进行调整。脚本如下:#!/bin/sh
qcache_hits=`mysql -u$1 -p$2 -e "show global status like 'Qcache_inserts'" | grep Qcache_inserts | awk '{print $2}'`
qcache_inserts=`mysql -u$1 -p$2 -e "show global status like 'Qcache_hits'" | grep Qcache_hits | awk '{print $2}'`
echo Qcache_hits: $qcache_hits
echo Qcache_inserts: $qcache_inserts
hit_rate=`echo "scale=2; $qcache_hits / ($qcache_hits + $qcache_inserts)" | bc`
echo Query_Cache_Hit_Rate: $hit_rate
原因如下:
Qcache_hits 因为这个一条语句可能被记录N次。
Com_select 所有查询次数。Qcache_queries_in_cache 表示在CACHE中的语句。
所有正确的公式:
Qcache_queries_in_cache/Com_select
Qcache_free_memory 15719856
Qcache_hits 0
Qcache_inserts 0
Qcache_lowmem_prunes 0
Qcache_not_cached 18
Qcache_queries_in_cache 0
Qcache_total_blocks 1
------------
查一下这些数值,计算一下命中率 Qcache_hits / (Qcache_inserts + Qcache_hits ) * 100%,
一般这个值低于90%,那么算比较低,然后看下block是不是太少了,如果命中低,且block少
那么先试图增大Qcache, 再观察观察, 如果数据仍然没什么起色, 也可以关掉, 一般情况不是
建议关掉, 况且你内在那么大
这个帖子我觉得更加权威一点