mysql参数优化中,关于query_cache_size的问题!

mysqldbd 2010-12-13 05:14:54
query_cache_size = 64M
  指定MySQL查询缓冲区的大小。可以通过在MySQL控制台执行以下命令观察:
  # > SHOW VARIABLES LIKE '%query_cache%'; # > SHOW STATUS LIKE 'Qcache%'; # 如果Qcache_lowmem_prunes的值非常大,则表明经常出现缓冲不够的情况;
  如果Qcache_hits的值非常大,则表明查询缓冲使用非常频繁,如果该值较小反而会影响效率,那么可以考虑不用查询缓冲;Qcache_free_blocks,如果该值非常大,则表明缓冲区中碎片很多。


这里说了Qcache_hits值大和Qcache_free_blocks值大,但是没有具体值,大家看下我的情况,这2个值是大还是小以及如何调整query_cache_size的值?

linux pc机器,内存8G。参数如下:

-- SHOW STATUS LIKE 'Qcache%';结果如下

'Qcache_free_blocks', '6021'

'Qcache_free_memory', '87000832'

'Qcache_hits', '4767104'

'Qcache_inserts', '761026'

'Qcache_lowmem_prunes', '0'

'Qcache_not_cached', '157380'

'Qcache_queries_in_cache', '12247'

'Qcache_total_blocks', '31216'


-- SHOW VARIABLES LIKE '%query_cache%'; 结果如下

'have_query_cache', 'YES'

'query_cache_limit', '1048576'

'query_cache_min_res_unit', '4096'

'query_cache_size', '138412032'

'query_cache_type', 'ON'

'query_cache_wlock_invalidate', 'OFF'






...全文
1371 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
小小小小周 2010-12-13
  • 打赏
  • 举报
回复
楼主的hit命中率很高了.
Qcache_free_blocks该值有点偏高,可以用flush query cache 来清理下.
rucypli 2010-12-13
  • 打赏
  • 举报
回复
zz from MySQL性能调优与架构设计

“Qcache_free_blocks”:Query Cache 中目前还有多少剩余的blocks。如果该值显示较大,
则说明Query Cache 中的内存碎片较多了,可能需要寻找合适的机会进行整理()。
● “Qcache_free_memory”:Query Cache 中目前剩余的内存大小。通过这个参数我们可以较为准
确的观察出当前系统中的Query Cache 内存大小是否足够,是需要增加还是过多了;
● “Qcache_hits”:多少次命中。通过这个参数我们可以查看到Query Cache 的基本效果;
● “Qcache_inserts”:多少次未命中然后插入。通过“Qcache_hits”和“Qcache_inserts”两
个参数我们就可以算出Query Cache 的命中率了:
Query Cache 命中率= Qcache_hits / ( Qcache_hits + Qcache_inserts );
● “Qcache_lowmem_prunes”:多少条Query 因为内存不足而被清除出Query Cache。通过
“Qcache_lowmem_prunes”和“Qcache_free_memory”相互结合,能够更清楚的了解到我们系
统中Query Cache 的内存大小是否真的足够,是否非常频繁的出现因为内存不足而有Query 被换

● “Qcache_not_cached”:因为query_cache_type 的设置或者不能被cache 的Query 的数量;
● “Qcache_queries_in_cache”:当前Query Cache 中cache 的Query 数量;
● “Qcache_total_blocks”:当前Query Cache 中的block 数量;

Query Cache 的限制
Query Cache 由于存放的都是逻辑结构的Result Set,而不是物理的数据页,所以在性能提升的同
时,也会受到一些特定的限制。
a) 5.1.17 之前的版本不能Cache 帮定变量的Query,但是从5.1.17 版本开始,Query Cache 已经
开始支持帮定变量的Query 了;
b) 所有子查询中的外部查询SQL 不能被Cache;
c) 在Procedure,Function 以及Trigger 中的Query 不能被Cache;
d) 包含其他很多每次执行可能得到不一样结果的函数的Query 不能被Cache。
鉴于上面的这些限制,在使用Query Cache 的过程中,建议通过精确设置的方式来使用,仅仅让合
适的表的数据可以进入Query Cache,仅仅让某些Query 的查询结果被Cache。
ACMAIN_CHM 2010-12-13
  • 打赏
  • 举报
回复
hit_rate= Qcache_hits/(Qcache_hits + com_select )

命中率越高越好。

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧