RDS for MySQL查询缓存 (Query Cache) 的设置和使用
https://help.aliyun.com/knowledge_detail/41717.html?spm=5176.7841698.2.11.aCvOXJ
RDS for MySQL查询缓存 (Query Cache) 的设置和使用
1. 功能和适用范围
功能:
降低 CPU 使用率
降低 IOPS 使用率(某些情况下)
减少查询响应时间,提高系统的吞吐量
适用范围:
表数据修改不频繁、数据较静态
查询(Select)重复度高
查询结果集小于 1 MB
注:
- 查询缓存并不一定带来性能上的提升,在某些情况下(比如查询数量大,但重复的查询很少)开启查询缓存会带来性能的下降。
2. 原理
RDS for MySQL 对来自客户端的查询(Select)进行 Hash 计算得到该查询的Hash值,通过该Hash 值到查询缓存中匹配该查询的结果。
如果匹配(命中),则将查询的结果集直接返回给客户端,不必再解析、执行查询。
如果没有匹配(命中),则将 Hash 值和结果集保存在查询缓存中,以便以后使用。
查询涉及的任何一个表中数据发生变化,RDS for MySQL 将查询缓存中所有与该表相关的查询结果集全部释放(删除)。
3. 限制
查询必须严格一致(大小写、空格、使用的数据库、协议版本、字符集等必须一致)才可以命中,否则视为不同查询。
不缓存查询中的子查询结果集,仅缓存查询最终结果集。
不缓存存储函数(Stored Function)、存储过程(Stored Procedure)、触发器(Trigger)、事件(Event)中的查询。
不缓存含有每次执行结果变化的函数的查询,比如 now()、curdate()、last_insert_id()、rand()等。
不缓存对 mysql、information_schema、performance_schema 系统数据库表的查询。
不缓存使用临时表的查询。
不缓存产生告警(Warnings)的查询。
不缓存 Select ... lock in share mode、Select ... for update、 Select * from ... where autoincrement_col is NULL 类型的查询。
不缓存使用用户定义变量的查询。
不缓存使用 Hint - SQL_NO_CACHE 的查询。
4. 设置
4.1 参数
RDS 控制台
参数设置
query_cache_limit: 查询缓存中可存放的单条查询最大结果集、默认为 1 MB;超过该大小的结果集不被缓存。
query_cache_size: 查询缓存的大小。
query_cache_type: 是否开启查询缓存功能。
取值为 0 :关闭查询功能
取值为 1 :开启查询缓存功能,但不缓存 Select SQL_NO_CACHE 开头的查询。
取值为 2 :开启查询缓存功能,但仅缓存 Select SQL_CACHE 开头的查询。

注:
- 修改 query_cache_type 需要重启实例(修改后实例会自动重启)。
- 参数 query_cache_size 要求设置值为 1024 的整数倍,否则会提示 “参数格式错误,请重新输入”。

4.2 开启
参数 query_cache_size 大于 0 并且 query_cache_type 设置为 1 或者 2 的情况下,查询缓存开启。
4.3 关闭
设置参数 query_cache_size 为 0 或者设置 query_cache_type 为 0 关闭查询缓存。
4.4 建议
query_cache_size 不建议设置的过大。过大的的空间不但挤占实例其他内存结构的空间,而且会增加在缓存中搜索的开销。建议根据实例规格,初始值设置为 10MB 到 100 MB 之间的值,而后根据运行使用情况调整。
建议通过调整 query_cache_size 的值来开启、关闭查询缓存,因为修改 query_cache_type 参数需要重启实例生效。
查询缓存适用于特定的场景,建议充分测试后,再考虑开启,避免引起性能下降或引入其他问题。
5. 验证效果
5.1 控制台

5.2 SQL 命令
show global status like 'Qca%';

可以通过 show global status like 'Qca%' 来获取查询缓存的使用状态。
Qcache_hits :查询缓存命中次数。
Qcache_inserts:将查询和结果集写入到查询缓存中的次数。
Qcache_not_cached:不可以缓存的查询次数。
Qcache_queries_in_cache:查询缓存中缓存的查询量。
RDS for MySQL查询缓存 (Query Cache) 的设置和使用的更多相关文章
- 关闭mysql查询缓存query cache(用户测试性能)
先对query cache进行查询 mysql> show global variables like '%cache%'; 查看query_cache_size.query_cache_typ ...
- 对MySql查询缓存及SQL Server过程缓存的理解及总结
一.MySql的Query Cache 1.Query Cache MySQL Query Cache是用来缓存我们所执行的SELECT语句以及该语句的结果集.MySql在实现Query Cache的 ...
- MySQL查询缓存详解
一:缓存条件,原理 MySQL Query Cache是用来缓存我们所执行的SELECT语句以及该语句的结果集,MySql在实现Query Cache的具体技术细节上类似典型的KV存储,就是将SELE ...
- 【转】MySQL查询缓存详解
[转]MySQL查询缓存详解 转自:https://www.cnblogs.com/Alight/p/3981999.html 相关文章:http://www.zsythink.net/archive ...
- MySQL查询缓存详解(总结)
MySQL查询缓存详解(总结) 一.总结 一句话总结: mysql查询缓存还是可以用用试一试,但是更推荐分布式,比如redis/memcache之流,将数据库中查询的数据和查询语句以键值对的方式存进分 ...
- 启用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查询缓存Query_cache的功用
MySQL的查询缓存并非缓存执行计划,而是查询及其结果集,这就意味着只有相同的查询操作才能命中缓存,因此MySQL的查询缓存命中率很低,另一方面,对于大结果集的查询,其查询结果可以从cache中直接读 ...
随机推荐
- longpo的回文
啊...比赛的时候输入打错了,结束之后还照着题解把DP部分重构了一遍然而还是WA...样例都没过,然后直接输了-1 明显的DP...而且数据范围这么小,显然怎么搞都可以... 而且这样的回文的DP是很 ...
- mysql复制数据
前言:由于工作需要,我要造大量数据,最好的方法是直接copy已有的数据,改其中一些值即可.操作的表有主键,且自增,AUTO_INCREMENT 按照以往的经验无外乎: 类别一. 如果两张张表(导出表和 ...
- sql 循环分割字符
DECLARE @Items VARCHAR(1000)='148' --待处理拼接字符串 --开始处理SET @Items=@Items+',' --必须追加“,”否则最后一个无法输出DECLARE ...
- boolean b=true?false:true==true?false:true;
下列代码的输出结果是_____ boolean b=true?false:true==true?false:true;System.out.println(b); 答案:false 题目来源:携程20 ...
- jQuery导航插件One-Page-Nav演示-显示命名锚记
jQuery导航插件One-Page-Nav演示-显示命名锚记 简介 使用 选项 示例 推荐 简介 电商网站的分类比较明确,比如1楼是手机通讯产品,2楼是家用电器,3楼是服装鞋包等等,旁边还会有一个固 ...
- CSS——border
表格细线: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- C/C++ 之dll注入
#include <stdio.h> #include <stdlib.h> #include <windows.h> #include <time.h> ...
- Uncaught TypeError: str.replace is not a function
在做审核页面时,点击审核通过按钮不执行 后来F12控制台查看发现有报错 是因为flisnullandxyzero未执行 然后找出这个方法,此方法为公共方法,将这个方法复制出来 然后使用console. ...
- 所有对象的父类(java.lang.Object)
一.介绍 Object类是类层次结构的根源,每一个类都存在一个父类为Object类.所有的对象,包括数组,都实现了 Object 类的方法. 二.对象初始化 这里使用了静态代码块进行Object类的初 ...
- Python MongoDB 教程
基于菜鸟教程实际操作后总结而来 Python MongoDB MongoDB 是目前最流行的 NoSQL 数据库之一,使用的数据类型 BSON(类似 JSON). MongoDB 数据库安装与介绍可以 ...