IT技术博客大学习 共学习 共进步

mysql cache功能小记

博客园-rethink log 2009-10-16 12:12:13 浏览 3,022 次
mysql cache功能分析:
1 mysql的cache功能的key的生成原理是:把select语句按照一定的hash规则生成唯一的key,select的结果生成value,即key=>value。所以对于cache而言,select语句是区分大小写的,也区分空格的。两个select语句必须完完全全一致,才能够获取到同一个cache。
2 生成cache之后,只要该select中涉及到的table有任何的数据变动(insert,update,delete操作等),相关的所有cache都会被删除。因此只有数据很少变动的table,引入mysql 的cache才较有意义。关于这方面的测试,可以参考:《Query Cache,看上去很美》一文。
所以,mysql的cache功能只适用于下列场合:数据变动较少,select较多的table。
那么。在复杂的系统中,如何使用mysql的cache功能呢,基本方法如下:
配置query_cache_type,同时改写程序。
query_cache_type 0 代表不使用缓冲, 1 代表使用缓冲,2 代表根据需要使用。
设置 1 代表缓冲永远有效,如果不需要缓冲,就需要使用如下语句:
SELECT SQL_NO_CACHE * FROM my_table WHERE ...
如果设置为 2 ,需要开启缓冲,可以用如下语句:
SELECT SQL_CACHE * FROM my_table WHERE ...

    So,最简单又可靠的做法是:把query_cache_type设置为2,然后在需要提高select速度的地方,使用:

  SELECT SQL_CACHE * FROM...
的方式进行SELECT。
【mysql cache调试笔记】
1 可以使用下列命令开启mysql的select cache功能:
SET GLOBAL query_cache_size = 102400000;
因为当query_cache_size默认为0时,是不开启cache功能的。
2 调试:
查看cache的设置:
show variables like \'%query_cache%\';
性能监控:
show status like \'%Qcache%\';
3 mysql cache的清理:
可以使用FLUSH QUERY CACHE语句来清理查询缓存碎片以提高内存使用性能。该语句不从缓存中移出任何查询。
RESET QUERY CACHE语句从查询缓存中移出所有查询。FLUSH TABLES语句也执行同样的工作。

建议继续学习

  1. 浅析http协议、cookies和session机制、浏览器缓存 (阅读 17,203)
  2. 分布式缓存系统 Memcached 入门 (阅读 16,043)
  3. 强制刷新本地 DNS 缓存记录 (阅读 10,640)
  4. Buffer和cache的区别是什么? (阅读 7,841)
  5. php缓存与加速分析与汇总 (阅读 7,723)
  6. Web应用的缓存设计模式 (阅读 7,304)
  7. 浏览器缓存机制 (阅读 7,101)
  8. 使用memc-nginx和srcache-nginx构建高效透明的缓存机制 (阅读 6,943)
  9. 谈冷热数据 (阅读 6,882)
  10. 缓存设计的一些思考 (阅读 6,821)