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 相关文章推荐
left join、inner join、right join的区别
Apr 05 MySQL
MySQL分库分表与分区的入门指南
Apr 22 MySQL
MySQL Router的安装部署
Apr 24 MySQL
MySQL索引知识的一些小妙招总结
May 10 MySQL
浅谈MySQL表空间回收的正确姿势
Oct 05 MySQL
深入讲解数据库中Decimal类型的使用以及实现方法
Feb 15 MySQL
一文弄懂MySQL中redo log与binlog的区别
Feb 15 MySQL
MySql中的json_extract函数处理json字段详情
Jun 05 MySQL
MySQL数据库实验之 触发器和存储过程
Jun 21 MySQL
MySQL事务的隔离级别详情
Jul 15 MySQL
MySql统计函数COUNT的具体使用详解
Aug 14 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
星际争霸 Starcraft 游戏介绍
2020/03/14 星际争霸
第十一节--重载
2006/11/16 PHP
PHP中spl_autoload_register函数的用法总结
2013/11/07 PHP
PHP依赖倒置(Dependency Injection)代码实例
2014/10/11 PHP
Yii学习总结之安装配置
2015/02/22 PHP
PHP设计模式之模板方法模式实例浅析
2018/12/20 PHP
seajs中模块的解析规则详解和模块使用总结
2014/03/12 Javascript
JS根据生日算年龄的方法
2015/05/05 Javascript
jQuery实现的手机发送验证码倒计时效果代码分享
2015/08/24 Javascript
JavaScript登录验证基础教程
2017/11/01 Javascript
JavaScript生成简单等差数列
2017/11/28 Javascript
vue中实现移动端的scroll滚动方法
2018/03/03 Javascript
使用Vue实现简单计算器
2020/02/25 Javascript
JavaScript ES6 Class类实现原理详解
2020/05/08 Javascript
基于python实现微信模板消息
2015/12/21 Python
Django如何实现内容缓存示例详解
2017/09/24 Python
Python探索之爬取电商售卖信息代码示例
2017/10/27 Python
Python Django模板之模板过滤器与自定义模板过滤器示例
2019/10/18 Python
python GUI库图形界面开发之PyQt5树形结构控件QTreeWidget详细使用方法与实例
2020/03/02 Python
Python如何实现自带HTTP文件传输服务
2020/07/08 Python
python regex库实例用法总结
2021/01/03 Python
python 视频下载神器(you-get)的具体使用
2021/01/06 Python
HTML5中语义化 b 和 i 标签
2008/10/17 HTML / CSS
美国购买隐形眼镜网站:Lenses For Less
2020/07/05 全球购物
介绍JAVA 中的Collection FrameWork(及如何写自己的数据结构)
2014/10/31 面试题
经理秘书岗位职责
2013/11/14 职场文书
学习党课思想汇报
2013/12/29 职场文书
平面设计专业求职信
2014/08/09 职场文书
实习工作表现评语
2014/12/31 职场文书
基层工作经历证明
2015/06/19 职场文书
门卫管理制度范本
2015/08/05 职场文书
实验室安全管理制度
2015/08/05 职场文书
MySQL REVOKE实现删除用户权限
2021/06/18 MySQL
7个关于Python的经典基础案例
2021/11/07 Python
科学家测试在太空中培育人造肉,用于未来太空旅行
2022/04/29 数码科技
JavaScript架构搭建前端监控如何采集异常数据
2022/06/25 Javascript