Mysql查询缓存Query_cache的功用
MySQL的查询缓存并非缓存执行计划,而是查询及其结果集,这就意味着只有相同的查询操作才能命中缓存,因此MySQL的查询缓存命中率很低,另一方面,对于大结果集的查询,其查询结果可以从cache中直接读取,有效的提升了查询效率。
那么如何设置缓存的大小呢?来看一下:
1、在mysql客户端命令行中我们可以这么查看缓存是否开启以及缓存设置的大小:
mysql> show variables like '%query_cache%';
+------------------------------+-------------+
| Variable_name | Value |
+------------------------------+-------------+
| have_query_cache | YES |
| query_cache_limit | 1048576 |
| query_cache_min_res_unit | 4096 |
| query_cache_size | 16106127360 |
| query_cache_type | ON |
| query_cache_wlock_invalidate | OFF |
+------------------------------+-------------+
6 rows in set (0.01 sec)
其中:
query_cache_type: 是否开启缓存功能,取值为ON, OFF, DEMAND,默认值为ON
- 值为OFF或0时,查询缓存功能关闭;
- 值为ON或1时,查询缓存功能打开,SELECT的结果符合缓存条件即会缓存,否则,不予缓存,显式指定SQL_NO_CACHE,不予缓存;
- 值为DEMAND或2时,查询缓存功能按需进行,显式指定SQL_CACHE的SELECT语句才会缓存;其它均不予缓存
query_cache_wlock_invalidate:表示当有其他客户端正在对MyISAM表进行写操作时,如果查询在query cache中,是否返回cache结果还是等写操作完成再读表获取结果。
query_cache_limit 指定单个查询能够使用的缓冲区大小,缺省为1M;
query_cache_min_res_unit为系统分配的最小缓存块大小,默认是4KB,设置值大对大数据查询有好处,但如果你的查询都是小数据查询,就容易造成内存碎片和浪费;query_cache_size:表示缓存的大小。
了解了以上的指标后我们就可以在mysql的配置文件my.cnf中进行设置。然后重启mysl服务器即可。在[mysqld]下面添加参数。一般是设置query_cache_size和query_cache_type两项。
2、上面查看的是我们进行缓存的配置,它一般从配置文件中读取值,但是有时候我们需要实时查看当前mysql中的数据缓存大小。
mysql> show status like '%qcache%';
+-------------------------+----------+
| Variable_name | Value |
+-------------------------+----------+
| Qcache_free_blocks | 1 |
| Qcache_free_memory | 1031832 |
| Qcache_hits | 0 |
| Qcache_inserts | 0 |
| Qcache_lowmem_prunes | 0 |
| Qcache_not_cached | 16489053 |
| Qcache_queries_in_cache | 0 |
| Qcache_total_blocks | 1 |
+-------------------------+----------+
8 rows in set (0.00 sec)
解释:

Qcache_free_memory:缓存中的空闲内存。
Qcache_total_blocks:缓存中块的数量。
Qcache_lowmem_prunes:缓存出现内存不足并且必须要进行清理以便为更多查询提供空间的次数。这个数字最好长时间来看;如果这个 数字在不断增长,就表示可能碎片非常严重,或者内存很少。如何确定就需要查看Qcache_free_blocks和Qcache_free_memory 两项指标。
3、清空缓存:
flush query cache命令
加大缓存有助于我们查询的效率提高:
这里举个例子:
mysql> use mob_adn
Database changed
mysql> select count(*) from creative_output;
+----------+
| count(*) |
+----------+
| 87151154 |
+----------+
1 row in set (3 min 18.29 sec) mysql> select count(*) from creative_output;
+----------+
| count(*) |
+----------+
| 87151154 |
+----------+
1 row in set (0.00 sec) mysql> select count(*) from creative_output;
+----------+
| count(*) |
+----------+
| 87151154 |
+----------+
1 row in set (0.00 sec)
可以看到缓存真的很厉害。
还有的同学会想到innodb_buffer_pool这个参数,两者的作用与区别我会接着来讲。
顺便这里在讲解一下SQL几项优化(很好):
https://www.cnblogs.com/L-dongf/p/9163848.html
Mysql查询缓存Query_cache的功用的更多相关文章
- MySQL 查询缓存 QUERY_CACHE
查询缓存(QueryCache)保存查询返回的完整结果.当查询命中该缓存,MySQL会立即返回结果,跳过解析.优化和执行阶段. 官方在特定环境测试结果(官方文档中有详细说明): 1.如果对某表进行简单 ...
- MySQL查询缓存
MySQL查询缓存 用于保存MySQL查询语句返回的完整结果,被命中时,MySQL会立即返回结果,省去解析.优化和执行等阶段. 如何检查缓存? MySQL保存结果于缓存中: 把SELECT语句本身做h ...
- 启用MySQL查询缓存
启用MySQL查询缓存能够极大地减低数据库server的CPU使用率,实际使用情况是:开启前CPU使用率120%左右,开启后降到了10%. 查看查询缓存情况: mysql> show varia ...
- mysql查询缓存打开、设置、参数查询、性能变量意思
http://blog.sina.com.cn/s/blog_75ad10100101by7j.html http://www.cnblogs.com/zemliu/archive/2013/08/0 ...
- mysql 查询缓存配置和查看
Mysql 查询缓存 查询缓存的作用就是当查询接收到一个和之前同样的查询,服务器将会从查询缓存种检索结果,而不是再次分析和执行上次的查询.这样就大大提高了性能,节省时间. 1.配置查询缓存 修改配置文 ...
- Mysql查询缓存碎片、缓存命中率及Nagios监控
Mysql 的优化方案,在互联网上可以查找到非常多资料,今天对Mysql缓存碎片和命中率作了详细了解,个人作了简单整理. 一.Mysql查询缓存碎片和缓存命中率. mysql> SHOW STA ...
- Mysql查询缓存研究
转载声明:本文为DBA+社群原创文章,转载必须连同本订阅号二维码全文转载,并注明作者名字及来源:DBA+社群(dbaplus). http://mp.weixin.qq.com/s?__biz=MzI ...
- 【转】MySQL查询缓存详解
[转]MySQL查询缓存详解 转自:https://www.cnblogs.com/Alight/p/3981999.html 相关文章:http://www.zsythink.net/archive ...
- MySQL查询缓存详解(总结)
MySQL查询缓存详解(总结) 一.总结 一句话总结: mysql查询缓存还是可以用用试一试,但是更推荐分布式,比如redis/memcache之流,将数据库中查询的数据和查询语句以键值对的方式存进分 ...
随机推荐
- MySQL主主复制以及使用keepalived保证高可用
1:准备工作 MySQL的安装步骤在此处省略:安装完成一定要做以下准备工作,初始化MySQL,/usr/bin/mysql_secure_installation,设置root密码,删除无效账户以及t ...
- angular enter事件,angular回车事件
angular回车键搜索,angular enter搜索 对于搜索框,用户在输入内容后的搜索习惯不是鼠标点击搜索按钮,而是直接按enter键,那我们怎么给enter键绑定事件呢,其实很简单,代码如下: ...
- 版本管理(一)之Git和GitHub的区别(优点和缺点)
Git 简介 https://www.yiibai.com/git/getting-started-git-basics.html Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或 ...
- js实现时间日期的格式化
前几天参加cvte的笔试,碰到了这样一道题目: //请写一个时间日期格式化的函数,具体要求如下: function format(date,"yyyy-mm-dd HH-mm-ss" ...
- UIKit 框架之UIView一
- (id)initWithFrame:(CGRect)aRect //通过一个矩形对象初始化 Configuring a View’s Visual Appearance //配置视觉展示 @pro ...
- 并发编程之 Java 三把锁
前言 今天我们继续学习并发.在之前我们学习了 JMM 的知识,知道了在并发编程中,为了保证线程的安全性,需要保证线程的原子性,可见性,有序性.其中,synchronized 高频出现,因为他既保证了原 ...
- docker下安装vim
进入docker内部后,发现之前的vim命令用不了了,这个时候就需要重新安装vim,具体步骤如下: 更新源 apt-get update 安装vim apt-get install vim
- Java - Thread 和 Runnable实现多线程
Java多线程系列--“基础篇”02之 常用的实现多线程的两种方式 概要 本章,我们学习“常用的实现多线程的2种方式”:Thread 和 Runnable.之所以说是常用的,是因为通过还可以通过jav ...
- JavaScriptDOM操作那些事儿
查询: ①.标准DOM操作API: document.getElementById. document.getElementsByTagName. document.getElementsByName ...
- 设计模式(22)--Template Method(模板方法模式)--行为型
作者QQ:1095737364 QQ群:123300273 欢迎加入! 1.模式定义: 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声 ...