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
如何使用Maxwell实时同步mysql数据
Apr 08 MySQL
MySQL之高可用集群部署及故障切换实现
Apr 22 MySQL
MySQL不使用order by实现排名的三种思路总结
Jun 02 MySQL
MySQL数据库完全卸载的方法
Mar 03 MySQL
MySQL分区表管理命令汇总
Mar 21 MySQL
你真的会用Mysql的explain吗
Mar 31 MySQL
CentOS MySql8 远程连接实战
Apr 19 MySQL
MySQ InnoDB和MyISAM存储引擎介绍
Apr 26 MySQL
使用Mysql计算地址的经纬度距离和实时位置信息
Apr 29 MySQL
mysql查找连续出现n次以上的数字
May 11 MySQL
Mysql如何查看是否使用到索引
Dec 24 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
用Zend Encode编写开发PHP程序
2006/10/09 PHP
php下通过curl抓取yahoo boss 搜索结果的实现代码
2011/06/10 PHP
php保存信息到当前Session的方法
2015/03/16 PHP
隐性调用php程序的方法
2015/06/13 PHP
PHP实现的memcache环形队列类实例
2015/07/28 PHP
解决php表单重复提交实现方法
2015/09/29 PHP
php计划任务之验证是否有多个进程调用同一个job的方法
2015/12/07 PHP
PHP实现通过文本文件统计页面访问量功能示例
2019/02/13 PHP
PHP大文件及断点续传下载实现代码
2020/08/18 PHP
在JavaScript中实现命名空间
2006/11/23 Javascript
Javascript var变量隐式声明方法
2009/10/19 Javascript
javascript showModalDialog模态对话框使用说明
2009/12/31 Javascript
js实现局部页面打印预览原理及示例代码
2014/07/03 Javascript
javascipt:filter过滤介绍及使用
2014/09/10 Javascript
基于JavaScript实现TAB标签效果
2016/01/12 Javascript
jQuery与JS加载事件用法分析
2016/09/04 Javascript
详解利用Angular实现多团队模块化SPA开发框架
2017/11/27 Javascript
jQuery中的$是什么意思及 $. 和 $().的区别
2018/04/20 jQuery
vue2.0实现移动端的输入框实时检索更新列表功能
2018/05/08 Javascript
使用proxy实现一个更优雅的vue【推荐】
2018/06/19 Javascript
如何利用ES6进行Promise封装总结
2019/02/11 Javascript
Angular8路由守卫原理和使用方法
2019/08/29 Javascript
Selenium执行JavaScript脚本的方法示例
2020/12/31 Javascript
Python学习之Django的管理界面代码示例
2018/02/10 Python
Appium Python自动化测试之环境搭建的步骤
2019/01/23 Python
Django实现单用户登录的方法示例
2019/03/28 Python
Pandas 重塑(stack)和轴向旋转(pivot)的实现
2019/07/22 Python
VScode连接远程服务器上的jupyter notebook的实现
2020/04/23 Python
OpenCV 之按位运算举例解析
2020/06/19 Python
创先争优承诺书
2015/01/20 职场文书
2015年爱牙日活动总结
2015/03/23 职场文书
经费申请报告
2015/05/15 职场文书
数学复习课教学反思
2016/02/18 职场文书
管理者们如何制定2019年的工作计划?
2019/07/01 职场文书
Python中Permission denied的解决方案
2021/04/02 Python
React Native项目框架搭建的一些心得体会
2021/05/28 Javascript