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时间设置注意事项的深入总结
May 06 MySQL
详解MySQL 联合查询优化机制
May 10 MySQL
my.ini优化mysql数据库性能的十个参数(推荐)
May 26 MySQL
Mysql中 unique列插入重复值该怎么解决呢
May 26 MySQL
解析MySQL binlog
Jun 11 MySQL
MySQL千万级数据表的优化实战记录
Aug 04 MySQL
MySQL令人大跌眼镜的隐式转换
Aug 23 MySQL
MySQL约束超详解
Sep 04 MySQL
一文搞懂MySQL索引页结构
Feb 28 MySQL
MySQL学习之基础命令实操总结
Mar 19 MySQL
mysql如何查询连续记录
May 11 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
德劲1102收音机的打理维修案例
2021/03/02 无线电
用PHP+MySql编写聊天室
2006/10/09 PHP
浅析php插件 HTMLPurifier HTML解析器
2013/07/01 PHP
php实现的递归提成方案实例
2015/11/14 PHP
PHP实现求两个字符串最长公共子串的方法示例
2017/11/17 PHP
JavaScript Base64编码和解码,实现URL参数传递。
2006/09/18 Javascript
encode脚本和normal脚本混用的问题与解决方法
2007/03/08 Javascript
jquery中$.post()方法的简单实例
2014/02/04 Javascript
js全选按钮的实现方法
2015/11/17 Javascript
js实现跨域访问的三种方法
2015/12/09 Javascript
JavaScript仿淘宝页面图片滚动加载及刷新回顶部的方法解析
2016/05/24 Javascript
jQuery无缝轮播图代码
2016/12/22 Javascript
nodejs利用http模块实现银行卡所属银行查询和骚扰电话验证示例
2016/12/30 NodeJs
AngularJS控制器controller给模型数据赋初始值的方法
2017/01/04 Javascript
Javascript实现跨域后台设置拦截的方法详解
2017/08/04 Javascript
layer子层给父层页面元素赋值,以达到向父层页面传值的效果实例
2017/09/22 Javascript
bootstrap fileinput插件实现预览上传照片功能
2018/01/23 Javascript
vue中引用阿里字体图标的方法
2018/02/10 Javascript
vue中接口域名配置为全局变量的实现方法
2018/09/20 Javascript
小程序实现上传视频功能
2020/08/18 Javascript
JavaScript实现简单验证码
2020/08/24 Javascript
如何使用jQuery操作Cookies方法解析
2020/09/08 jQuery
通过实例浅析Python对比C语言的编程思想差异
2015/08/30 Python
python使用matplotlib绘制柱状图教程
2017/02/08 Python
通过Pandas读取大文件的实例
2018/06/07 Python
Python实现EXCEL表格的排序功能示例
2019/06/25 Python
Pycharm新建模板默认添加个人信息的实例
2019/07/15 Python
将matplotlib绘图嵌入pyqt的方法示例
2020/01/08 Python
python通过对字典的排序,对json字段进行排序的实例
2020/02/27 Python
浅谈Keras的Sequential与PyTorch的Sequential的区别
2020/06/17 Python
CSS3制作ajax loader icon实现思路及代码
2013/08/25 HTML / CSS
加拿大女包品牌:Matt & Nat
2017/05/12 全球购物
德国内衣、泳装和睡衣网上商店:Bigsize Dessous
2018/07/09 全球购物
商场广播稿范文
2015/08/19 职场文书
nginx简单配置多个server的方法
2021/03/31 Servers
django上传文件的三种方式
2021/04/29 Python