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下使用Inplace和Online方式创建索引的教程
May 26 MySQL
MySQL 外键约束和表关系相关总结
Jun 20 MySQL
Mysql数据库值的添加、修改、删除及清空操作实例
Jun 20 MySQL
Mysql数据库中datetime、bigint、timestamp来表示时间选择,谁来存储时间效率最高
Aug 23 MySQL
MySQL数据库中varchar类型的数字比较大小的方法
Nov 17 MySQL
MySQL中varchar和char类型的区别
Nov 17 MySQL
MySQL如何快速创建800w条测试数据表
Mar 17 MySQL
MySQL Server 层四个日志
Mar 31 MySQL
MYSQL如何查看操作日志详解
May 30 MySQL
MySQL数据库表约束讲解
Jun 21 MySQL
Mysql表数据比较大情况下修改添加字段的方法实例
Jun 28 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中simplexml_load_string函数使用说明
2011/01/01 PHP
php如何获取文件的扩展名
2015/10/28 PHP
php array_udiff_assoc 计算两个数组的差集实例
2016/11/12 PHP
Jquery知识点一 Jquery的ready和Dom的onload的区别
2011/01/15 Javascript
多种方式实现JS调用后台方法进行数据交互
2013/08/20 Javascript
使用JavaScript实现Java的List功能(实例讲解)
2013/11/07 Javascript
JavaScript中的对象的extensible属性介绍
2014/12/30 Javascript
javascript的列表切换【实现代码】
2016/05/03 Javascript
JavaScript手机振动API
2016/06/11 Javascript
深入理解Angularjs向指令传递数据双向绑定机制
2016/12/31 Javascript
Bootstrap 模态框多次显示后台提交多次BUG的解决方法
2017/12/26 Javascript
使用vue官方提供的模板vue-cli搭建一个helloWorld案例分析
2018/01/16 Javascript
Vue filter介绍及详细使用
2018/04/04 Javascript
angular中子控制器向父控制器传值的实例
2018/10/08 Javascript
[01:07:41]IG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python用10行代码实现对黄色图片的检测功能
2015/08/10 Python
Python numpy 常用函数总结
2017/12/07 Python
在django模板中实现超链接配置
2019/08/21 Python
Python实现Wordcloud生成词云图的示例
2020/03/30 Python
解决Python在导入文件时的FileNotFoundError问题
2020/04/10 Python
详解python metaclass(元类)
2020/08/13 Python
容易被忽略的Python内置类型
2020/09/03 Python
pandas使用函数批量处理数据(map、apply、applymap)
2020/11/27 Python
使用索引(Index)有哪些需要考虑的因素
2016/10/19 面试题
常用UNIX 命令(Linux的常用命令)
2015/12/26 面试题
毕业生个人的自我评价优秀范文
2013/10/03 职场文书
迟到检讨书900字
2014/01/14 职场文书
函授毕业生自我鉴定范文
2014/03/25 职场文书
房产继承公证书
2014/04/09 职场文书
2014年政风行风自查自纠报告
2014/10/21 职场文书
2015年民主生活会发言材料
2014/12/15 职场文书
干部培训工作总结2015
2015/05/25 职场文书
python requests模块的使用示例
2021/04/07 Python
CSS 还能这样玩?奇思妙想渐变的艺术
2021/04/27 HTML / CSS
mysql联合索引的使用规则
2021/06/23 MySQL
nginx 配置指令之location使用详解
2022/05/25 Servers