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 - 常用函数 每天积极向上
Apr 05 MySQL
详解MySQL InnoDB存储引擎的内存管理
Apr 08 MySQL
MySQL 数据恢复的多种方法汇总
Jun 21 MySQL
mysq启动失败问题及场景分析
Jul 15 MySQL
一文带你探究MySQL中的NULL
Nov 11 MySQL
SQL基础的查询语句
Nov 11 MySQL
一条慢SQL语句引发的改造之路
Mar 16 MySQL
MySQL学习之基础命令实操总结
Mar 19 MySQL
MySQL派生表联表查询实战过程
Mar 20 MySQL
MySQL Server 层四个日志
Mar 31 MySQL
mysql5.5中文乱码问题解决的有用方法
May 30 MySQL
MySQL控制流函数(-if ,elseif,else,case...when)
Jul 07 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缓存的详解
2013/05/15 PHP
PHP实现Soap通讯的方法
2014/11/03 PHP
php好代码风格的阶段性总结
2016/06/25 PHP
thinkPHP框架对接支付宝即时到账接口回调操作示例
2016/11/14 PHP
php实现等比例不失真缩放上传图片的方法
2016/11/14 PHP
多个Laravel项目如何共用migrations详解
2018/09/25 PHP
jquery 子窗口操作父窗口的代码
2009/09/21 Javascript
JavaScript的单例模式 (singleton in Javascript)
2010/06/11 Javascript
让人印象深刻的10个jQuery手风琴效果应用
2012/05/08 Javascript
在父页面调用子页面的JS方法
2013/09/29 Javascript
jquery如何获取复选框的值
2013/12/12 Javascript
js动态切换图片的方法
2015/01/20 Javascript
对Web开发中前端框架与前端类库的一些思考
2015/03/27 Javascript
javascript创建动态表单的方法
2015/07/25 Javascript
浅谈JQuery+ajax+jsonp 跨域访问
2016/06/25 Javascript
js canvas实现QQ拨打电话特效
2017/05/10 Javascript
jQuery进阶实践之利用最优雅的方式如何写ajax请求
2017/12/20 jQuery
vue中element 上传功能的实现思路
2018/07/06 Javascript
使用koa-log4管理nodeJs日志笔记的使用方法
2018/11/30 NodeJs
微信小程序使用setData修改数组中单个对象的方法分析
2018/12/30 Javascript
vue组件通信传值操作示例
2019/01/08 Javascript
vue-cli中使用高德地图的方法示例
2019/03/28 Javascript
JS实现点击生成UUID的方法完整实例【基于jQuery】
2019/06/12 jQuery
vue+elementUi图片上传组件使用详解
2019/08/20 Javascript
零基础写python爬虫之urllib2中的两个重要概念:Openers和Handlers
2014/11/05 Python
使用Python抓取模板之家的CSS模板
2015/03/16 Python
python通过smpt发送邮件的方法
2015/04/30 Python
python jieba分词并统计词频后输出结果到Excel和txt文档方法
2018/02/11 Python
python将数据插入数据库的代码分享
2020/08/16 Python
深入浅析css3 border-image边框图像详解
2015/11/24 HTML / CSS
美国杰西潘尼官网:JCPenney
2019/06/12 全球购物
协议书样本
2014/04/23 职场文书
三八妇女节主持词
2015/07/04 职场文书
2019大学生暑期实习心得总结
2019/08/21 职场文书
MySQL分库分表详情
2021/09/25 MySQL
Grafana可视化监控系统结合SpringBoot使用
2022/04/19 Redis