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 11 MySQL
MySQL官方导出工具mysqlpump的使用
May 21 MySQL
MySQL中distinct和count(*)的使用方法比较
May 26 MySQL
MySQL中IF()、IFNULL()、NULLIF()、ISNULL()函数的使用详解
Jun 26 MySQL
mysql 数据插入优化方法之concurrent_insert
Jul 01 MySQL
mysql中int(3)和int(10)的数值范围是否相同
Oct 16 MySQL
MySQL中varchar和char类型的区别
Nov 17 MySQL
Mysql中有关Datetime和Timestamp的使用总结
Dec 06 MySQL
解析MySQL索引的作用
Mar 03 MySQL
Mysql 数据库中的 redo log 和 binlog 写入策略
Apr 26 MySQL
MySQL 数据库 增删查改、克隆、外键 等操作
May 11 MySQL
MySQL GTID复制的具体使用
May 20 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中数组合并的两种方法及区别介绍
2012/09/14 PHP
WordPress中调试缩略图的相关PHP函数使用解析
2016/01/07 PHP
php脚本运行时的超时机制详解
2016/02/17 PHP
详解Yii2 之 生成 URL 的方法
2017/06/16 PHP
laravel异步监控定时调度器实例详解
2019/06/21 PHP
动态加载js和css(外部文件)
2013/04/17 Javascript
js实现动画特效的文字链接鼠标悬停提示的方法
2015/03/02 Javascript
javascript中slice(),splice(),split(),substring(),substr()使用方法
2015/03/13 Javascript
基于jQuery实现仿QQ空间送礼物功能代码
2016/05/24 Javascript
nodejs实现爬取网站图片功能
2017/12/14 NodeJs
vue升级之路之vue-router的使用教程
2018/08/14 Javascript
javascript动态创建对象的属性详解
2018/11/07 Javascript
Vue的H5页面唤起支付宝支付功能
2019/04/18 Javascript
在vue中封装方法以及多处引用该方法详解
2020/08/14 Javascript
element-ui和vue表单(对话框)验证提示语(残留)清除操作
2020/09/11 Javascript
TypeScript魔法堂之枚举的超实用手册
2020/10/29 Javascript
[58:37]Serenity vs Fnatic 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
Python中类的继承代码实例
2014/10/28 Python
python 定义给定初值或长度的list方法
2018/06/23 Python
Python删除n行后的其他行方法
2019/01/28 Python
python基于SMTP协议发送邮件
2019/05/31 Python
django框架实现一次性上传多个文件功能示例【批量上传】
2019/06/19 Python
简单了解Python matplotlib线的属性
2019/06/29 Python
pandas进行时间数据的转换和计算时间差并提取年月日
2019/07/06 Python
python如何获取apk的packagename和activity
2020/01/10 Python
Python实现动态给类和对象添加属性和方法操作示例
2020/02/29 Python
css3实现圆锥渐变conic-gradient效果
2020/02/12 HTML / CSS
HTML5 video标签(播放器)学习笔记(二):播放控制
2015/04/24 HTML / CSS
html5本地存储 localStorage操作使用详解
2016/09/20 HTML / CSS
可打印的优惠券、杂货和优惠券代码:Coupons.com
2018/06/12 全球购物
有abstract方法的类一定要用abstract修饰吗
2016/03/14 面试题
小学运动会广播稿200字(十二篇)
2014/01/14 职场文书
生物学学生自我评价
2014/01/17 职场文书
函授生自我鉴定
2014/03/25 职场文书
pytorch实现手写数字图片识别
2021/05/20 Python