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 07 MySQL
MySQL如何构建数据表索引
May 13 MySQL
简单了解 MySQL 中相关的锁
May 25 MySQL
MySQL Router实现MySQL的读写分离的方法
May 27 MySQL
MySQL 数据恢复的多种方法汇总
Jun 21 MySQL
MySQL中存储时间的最佳实践指南
Jul 01 MySQL
MySQL 聚合函数排序
Jul 16 MySQL
一篇文章带你深入了解Mysql触发器
Aug 02 MySQL
详细聊聊关于Mysql联合查询的那些事儿
Oct 24 MySQL
浅谈MySql整型索引和字符串索引失效或隐式转换问题
Nov 20 MySQL
Mysql中有关Datetime和Timestamp的使用总结
Dec 06 MySQL
MySQL分区表管理命令汇总
Mar 21 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
DedeCMS 核心类TypeLink.class.php摘要笔记
2010/04/07 PHP
php下利用curl判断远程文件是否存在的实现代码
2011/10/08 PHP
PHP APC的安装与使用详解
2013/06/13 PHP
使用PHP如何实现高效安全的ftp服务器(二)
2015/12/30 PHP
php表单文件iframe异步上传实例讲解
2017/07/26 PHP
在页面上点击任一链接时触发一个事件的代码
2007/04/07 Javascript
jQuery实现随意改变div任意属性的名称和值(部分原生js实现)
2013/05/28 Javascript
JQuery中serialize()、serializeArray()和param()方法示例介绍
2014/07/31 Javascript
根据当前时间在jsp页面上显示上午或下午
2014/08/18 Javascript
json传值以及ajax接收详解
2016/05/24 Javascript
js判断价格,必须为数字且不能为负数的实现方法
2016/10/07 Javascript
vue中添加mp3音频文件的方法
2018/03/02 Javascript
一篇文章介绍redux、react-redux、redux-saga总结
2019/05/23 Javascript
js实现跟随鼠标移动的小球
2019/08/26 Javascript
node.js使用fs读取文件出错的解决方案
2019/10/23 Javascript
JavaScript实现Excel表格效果
2020/02/07 Javascript
[04:11]DOTA2上海特级锦标赛主赛事首日TOP10
2016/03/03 DOTA
python通过线程实现定时器timer的方法
2015/03/16 Python
详解Python中的join()函数的用法
2015/04/07 Python
老生常谈python之鸭子类和多态
2017/06/13 Python
Python2实现的LED大数字显示效果示例
2017/09/04 Python
Python 经典面试题 21 道【不可错过】
2018/09/21 Python
Python3安装psycopy2以及遇到问题解决方法
2019/07/03 Python
Python类中的魔法方法之 __slots__原理解析
2019/08/26 Python
tensorflow从ckpt和从.pb文件读取变量的值方式
2020/05/26 Python
使用Dajngo 通过代码添加xadmin用户和权限(组)
2020/07/03 Python
详解tensorflow之过拟合问题实战
2020/11/01 Python
Pycharm安装Qt Design快捷工具的详细教程
2020/11/18 Python
只要五步 就可以用HTML5/CSS3快速制作便签贴特效(图)
2012/06/04 HTML / CSS
某公司部分笔试题
2013/11/05 面试题
运动会广播稿100字
2014/01/11 职场文书
音乐教学反思
2014/02/02 职场文书
会计电算化大学生职业规划书
2014/02/05 职场文书
县委常委班子专题民主生活会查摆问题及整改措施
2014/09/27 职场文书
民主评议党员自我鉴定
2014/10/21 职场文书
如何判断微信付款码和支付宝付款码
2021/04/01 PHP