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 kill不掉线程的原因
May 07 MySQL
mysql在项目中怎么选事务隔离级别
May 25 MySQL
MySQL 外键约束和表关系相关总结
Jun 20 MySQL
新手入门Mysql--sql执行过程
Jun 20 MySQL
Prometheus 监控MySQL使用grafana展示
Aug 30 MySQL
MySQL创建管理RANGE分区
Apr 13 MySQL
mysql实现将字符串字段转为数字排序或比大小
Jun 14 MySQL
MySQL聚簇索引和非聚簇索引的区别详情
Jun 14 MySQL
MySQL索引失效场景及解决方案
Jul 23 MySQL
MySql按时,天,周,月进行数据统计
Aug 14 MySQL
MySQL 原理与优化之原数据锁的应用
Aug 14 MySQL
MySQL中的 inner join 和 left join的区别解析(小结果集驱动大结果集)
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中实现简单的ACL 完结篇
2011/09/07 PHP
php发送get、post请求的6种方法简明总结
2014/07/08 PHP
PHP中类型转换 ,常量,系统常量,魔术常量的详解
2017/10/26 PHP
TP5框架实现一次选择多张图片并预览的方法示例
2020/04/04 PHP
PHP 面向对象程序设计之类属性与类常量实现方法分析
2020/04/13 PHP
Javascript实例教程(19) 使用HoTMetal(6)
2006/12/23 Javascript
网页源代码保护(禁止右键、复制、另存为、查看源文件)
2012/05/23 Javascript
jQuery实现个性翻牌效果导航菜单的方法
2015/03/09 Javascript
JS获取网页图片name属性的方法
2015/04/01 Javascript
javascript实现dom动态创建省市纵向列表菜单的方法
2015/05/14 Javascript
JavaScript实现非常简单实用的下拉菜单效果
2015/08/27 Javascript
JavaScript实现简单获取当前网页网址的方法
2015/11/09 Javascript
浅谈javascript中onbeforeunload与onunload事件
2015/12/10 Javascript
jquery实现无刷新验证码的简单实例
2016/05/19 Javascript
jQuery中的一些小技巧
2017/01/18 Javascript
使用jQuery操作DOM的方法小结
2017/02/27 Javascript
nodejs遍历文件夹下并操作HTML/CSS/JS/PNG/JPG的方法
2018/11/01 NodeJs
js实现简单模态框实例
2018/11/16 Javascript
react-router 路由切换动画的实现示例
2018/12/03 Javascript
JavaScript模板引擎实现原理实例详解
2018/12/14 Javascript
vue+vuex+axios从后台获取数据存入vuex,组件之间共享数据操作
2020/07/31 Javascript
python将多个文本文件合并为一个文本的代码(便于搜索)
2011/03/13 Python
python 多进程通信模块的简单实现
2014/02/20 Python
关于python的bottle框架跨域请求报错问题的处理方法
2017/03/19 Python
python利用OpenCV2实现人脸检测
2020/04/16 Python
python scp 批量同步文件的实现方法
2019/01/03 Python
对python:threading.Thread类的使用方法详解
2019/01/31 Python
简单了解Python matplotlib线的属性
2019/06/29 Python
在Python中append以及extend返回None的例子
2019/07/20 Python
django数据模型(Model)的字段类型解析
2019/12/25 Python
求职信写作要突出重点
2014/01/01 职场文书
拉歌口号大全
2014/06/13 职场文书
幼儿园健康教育方案
2014/06/14 职场文书
入党积极分子学习党的纲领思想汇报
2014/09/13 职场文书
Spring Boot 启动、停止、重启、状态脚本
2021/06/26 Java/Android
MySQL中B树索引和B+树索引的区别详解
2022/03/03 MySQL