日期:2014-05-16  浏览次数:20772 次

mysql中如何计算查询缓存命中率
在网上搜了几篇文章,说法都不一样,有没有前辈知道的,请指点下

------解决方案--------------------
命中率=Qcache_hits/(Qcache_hits+Com_select)

Com_select:
SQL code

mysql> show global status like '%com_select%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Com_select    | 1     |
+---------------+-------+
1 row in set (0.00 sec)

mysql>

------解决方案--------------------
1。MYSQL存储原理,数据文件按页存储最小单位是一页16K,每页的前100多个字节保存表的相关内容 包括数据库,表名,多少条记录被逻辑删除了,多少条记录没有
2。每条记录的头部保存的是该记录的总长度,因为虽然定义了长度但其实际长度均不尽相同,MYSQL第一个字段保存的是表的主键,第二个字段保存锁ID,用于表数据的加过和回滚,其长度固定的是13个字节。
3。不要经常的更新数据,因为更新相当于删除以前的,然后再追加一条记录。以上分别都能影响命中率,还有表的数据不是连续存储的,是根据整个数据表数据插入的先后存储的。以上希望有帮助,谢谢。
------解决方案--------------------
对了以上理论仅仅针对INNODB存储引擎,因存储引擎比较多,其他的不一定是这种方法。
------解决方案--------------------
Qcache_hits/(Qcache_hits+Com_select) 这个是比较通用的方法。

MYSQL本身并没有提供这个参数,并且各种计算方法,包括上面这个也都是非精确的。