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 相关文章推荐
数据库的高级查询六:表连接查询:外连接(左外连接,右外连接,UNION关键字,连接中ON与WHERE的不同)
Apr 05 MySQL
MySQL 慢查询日志深入理解
Apr 22 MySQL
MySQL大小写敏感的注意事项
May 24 MySQL
修改MySQL的默认密码的四种小方法
May 26 MySQL
MySQL中utf8mb4排序规则示例
Aug 02 MySQL
SQL之各种join小结详细讲解
Aug 04 MySQL
全面盘点MySQL中的那些重要日志文件
Nov 27 MySQL
Mysql数据库表中为什么有索引却没有提高查询速度
Feb 24 MySQL
MySQL慢查询优化解决问题
Mar 17 MySQL
MySQL优化及索引解析
Mar 17 MySQL
CentOS MySql8 远程连接实战
Apr 19 MySQL
MySQL添加索引特点及优化问题
Jul 23 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中DOMDocument简单用法示例代码(XML创建、添加、删除、修改)
2010/12/19 PHP
通过PHP修改Linux或Unix口令的方法分享
2012/01/30 PHP
深入解析php中的foreach问题
2013/06/30 PHP
file_get_contents("php://input", "r")实例介绍
2013/07/01 PHP
php实现MD5加密16位(不要默认的32位)
2013/08/12 PHP
php中引用符号(&)的使用详解
2013/11/13 PHP
PHPThumb图片处理实例
2014/05/03 PHP
解密ThinkPHP3.1.2版本之模板继承
2014/06/19 PHP
PHP实现采集抓取淘宝网单个商品信息
2015/01/08 PHP
php实现上传图片保存到数据库的方法
2015/02/11 PHP
Laravel使用PHPQRCODE实现生成带有LOGO的二维码图片功能示例
2017/07/07 PHP
php实现的中秋博饼游戏之掷骰子并输出结果功能详解
2017/11/06 PHP
thinkphp5 模型实例化获得数据对象的教程
2019/10/18 PHP
PHP字符串和十六进制如何实现互相转换
2020/07/16 PHP
模仿JQuery sortable效果 代码有错但值得看看
2009/11/05 Javascript
Javascript的匿名函数小结
2009/12/31 Javascript
jQueryUI 拖放排序遇到滚动条时有可能无法执行排序的小bug及解决方案
2016/12/19 Javascript
Angular-UI Bootstrap组件实现警报功能
2018/07/16 Javascript
vue框架下部署上线后刷新报404问题的解决方案(推荐)
2019/04/03 Javascript
详解vuex之store源码简单解析
2019/06/13 Javascript
PHP读取远程txt文档到数组并实现遍历
2020/08/25 Javascript
[00:35]DOTA2上海特级锦标赛 MVP.Phx战队宣传片
2016/03/04 DOTA
Python Socket编程入门教程
2014/07/11 Python
Python如何为图片添加水印
2016/11/25 Python
Python基于生成器迭代实现的八皇后问题示例
2018/05/23 Python
法国在线药房:DoctiPharma
2020/10/21 全球购物
Bandier官网:奢侈、时尚前卫的健身服装首选目的地
2020/07/05 全球购物
在校生汽车维修实习自我鉴定
2013/09/19 职场文书
2014年党务公开实施方案
2014/02/27 职场文书
中国好声音广告词
2014/03/18 职场文书
总经理2015中秋节致辞
2015/07/29 职场文书
2016年端午节校园广播稿
2015/12/18 职场文书
创业计划书之蛋糕店
2019/08/29 职场文书
python实现过滤敏感词
2021/05/08 Python
古见同学有交流障碍症 第二季宣传CM公开播出
2022/04/11 日漫
Nginx报错104:Connection reset by peer问题的解决及分析
2022/07/23 Servers