MySQL query_cache_type 参数与使用详解


Posted in MySQL onJuly 01, 2021

MySQL设置查询缓存的用意:

把查询到的结果缓存起来,下次再执行相同查询时就可以直接从结果集中取;这样就比重新查一遍要快的多。

查询缓存的最终结果是事与愿违:

之所以查询缓存并没有能起到提升性能的做用,客观上有如下两点原因

1、把SQL语句的hash值作为键,SQL语句的结果集作为值;这样就引起了一个问题如 select user from mysql.user 和 SELECT user FROM mysql.user

这两个将会被当成不同的SQL语句,这个时候就算结果集已经有了,但是一然用不到。

2、当查询所基于的低层表有改动时与这个表有关的查询缓存都会作废、如果对于并发度比较大的系统这个开销是可观的;对于作废结果集这个操作也是要用并发

访问控制的,就是说也会有锁。并发大的时候就会有Waiting for query cache lock 产生。

3、至于用不用还是要看业务模型的。

如果何配置查询缓存:

query_cache_type 这个系统变量控制着查询缓存工能的开启的关闭。

query_cache_type=0时表示关闭,1时表示打开,2表示只要select 中明确指定SQL_CACHE才缓存。

这个参数的设置有点奇怪,1、如果事先查询缓存是关闭的然而用 set @@global.query_cache_type=1; 会报错

ERROR 1651 (HY000): Query cache is disabled; restart the server with query_cache_type=1 to enable it

2、如果事先是打开着的尝试去闭关它,那么这个关闭也是不完全的,这种情况下查询还是会去尝试查找缓存。

最好的关闭查询缓存的办法就是把my.cnf 中的query_cache_type=0然后再重启mysql。

查询缓存相关的系统变量:

have_query_cache表示这个mysql版本是否支持查询缓存。

query_cache_limit 表示单个结果集所被允许缓存的最大值。

query_cache_min_res_unit每个被缓存的结果集要占用的最小内存。

query_cache_size用于查询缓存的内存大小。

如何监控查询缓存的命中率:

Qcache_free_memory查询缓存目前剩余空间大小。

Qcache_hits 查询缓存的命中次数。

Qcache_inserts 查询缓存插入的次数。

也就是说缓存的命中率为 Qcache_hits/(Qcache_hits+Qcache_inserts)

MySQL 相关文章推荐
MySQL infobright的安装步骤
Apr 07 MySQL
MySQL获取所有分类的前N条记录
May 07 MySQL
MySQL 分页查询的优化技巧
May 12 MySQL
MySQL中存储时间的最佳实践指南
Jul 01 MySQL
MySQL深度分页(千万级数据量如何快速分页)
Jul 25 MySQL
MySQL表类型 存储引擎 的选择
Nov 11 MySQL
MySQL 主从复制数据不一致的解决方法
Mar 18 MySQL
MySQL普通表如何转换成分区表
May 30 MySQL
mysql数据库实现设置字段长度
Jun 10 MySQL
mysql幻读详解实例以及解决办法
Jun 16 MySQL
MySQL数据库实验之 触发器和存储过程
Jun 21 MySQL
SQL中去除重复数据的几种方法汇总(窗口函数对数据去重)
May 08 MySQL
mysql 数据插入优化方法之concurrent_insert
Jul 01 #MySQL
MySQL的Query Cache图文详解
MySQL高速缓存启动方法及参数详解(query_cache_size)
Jul 01 #MySQL
mysql优化之query_cache_limit参数说明
Jul 01 #MySQL
MySQL中存储时间的最佳实践指南
Jul 01 #MySQL
MySQL连表查询分组去重的实现示例
Jul 01 #MySQL
python中的mysql数据库LIKE操作符详解
Jul 01 #MySQL
You might like
PHP小程序自动提交到自助友情连接
2009/11/24 PHP
PHP框架Swoole定时器Timer特性分析
2014/08/19 PHP
PHP中用mysqli面向对象打开连接关闭mysql数据库的方法
2016/11/05 PHP
PHP使用PDO调用mssql存储过程的方法示例
2017/10/07 PHP
如何学习Javascript入门指导
2013/11/01 Javascript
JSON无限折叠菜单编写实例
2013/12/16 Javascript
JS遍历Json字符串中键值对先转成JSON对象再遍历
2014/08/15 Javascript
jQuery源码解读之hasClass()方法分析
2015/02/20 Javascript
JS实现在网页中弹出一个输入框的方法
2015/03/03 Javascript
JS+CSS实现下拉列表框美化效果(3款)
2015/08/15 Javascript
JS获取时间的相关函数及时间戳与时间日期之间的转换
2016/02/04 Javascript
jquery ajax局部加载方法详解(实现代码)
2016/05/12 Javascript
JavaScript代码性能优化总结篇
2016/05/15 Javascript
vue.js项目打包上线的图文教程
2017/11/16 Javascript
Echarts地图添加引导线效果(labelLine)
2019/09/30 Javascript
深入浅析JavaScript中的in关键字和for-in循环
2020/04/20 Javascript
python 网络编程常用代码段
2016/08/28 Python
Python字符串处理实现单词反转
2017/06/14 Python
Python搭建代理IP池实现存储IP的方法
2019/10/27 Python
python常用数据重复项处理方法
2019/11/22 Python
Pycharm最新激活码2019(推荐)
2019/12/31 Python
html5 Canvas实现图片旋转的示例
2018/01/15 HTML / CSS
澳大利亚珍珠首饰购物网站:Vayo Pearls
2019/03/11 全球购物
某个公司的Java笔面试题
2016/03/11 面试题
保险经纪人求职信
2014/03/11 职场文书
施工安全责任书范本
2014/07/24 职场文书
公证委托书格式
2014/09/13 职场文书
学院党的群众路线教育实践活动整改方案
2014/10/04 职场文书
党员批评与自我批评发言稿
2014/10/14 职场文书
服务明星事迹材料
2014/12/29 职场文书
病危通知书样本
2015/04/17 职场文书
《分数的意义》教学反思
2016/02/20 职场文书
中学教代会开幕词
2016/03/04 职场文书
廉政党课工作报告案例
2019/06/21 职场文书
SpringCloud之@FeignClient()注解的使用方式
2021/09/25 Java/Android
Golang jwt身份认证
2022/04/20 Golang