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) 的设置和使用的更多相关文章

  1. 关闭mysql查询缓存query cache(用户测试性能)

    先对query cache进行查询 mysql> show global variables like '%cache%'; 查看query_cache_size.query_cache_typ ...

  2. 对MySql查询缓存及SQL Server过程缓存的理解及总结

    一.MySql的Query Cache 1.Query Cache MySQL Query Cache是用来缓存我们所执行的SELECT语句以及该语句的结果集.MySql在实现Query Cache的 ...

  3. MySQL查询缓存详解

    一:缓存条件,原理 MySQL Query Cache是用来缓存我们所执行的SELECT语句以及该语句的结果集,MySql在实现Query Cache的具体技术细节上类似典型的KV存储,就是将SELE ...

  4. 【转】MySQL查询缓存详解

    [转]MySQL查询缓存详解 转自:https://www.cnblogs.com/Alight/p/3981999.html 相关文章:http://www.zsythink.net/archive ...

  5. MySQL查询缓存详解(总结)

    MySQL查询缓存详解(总结) 一.总结 一句话总结: mysql查询缓存还是可以用用试一试,但是更推荐分布式,比如redis/memcache之流,将数据库中查询的数据和查询语句以键值对的方式存进分 ...

  6. 启用MySQL查询缓存

    启用MySQL查询缓存能够极大地减低数据库server的CPU使用率,实际使用情况是:开启前CPU使用率120%左右,开启后降到了10%. 查看查询缓存情况: mysql> show varia ...

  7. mysql查询缓存打开、设置、参数查询、性能变量意思

    http://blog.sina.com.cn/s/blog_75ad10100101by7j.html http://www.cnblogs.com/zemliu/archive/2013/08/0 ...

  8. mysql 查询缓存配置和查看

    Mysql 查询缓存 查询缓存的作用就是当查询接收到一个和之前同样的查询,服务器将会从查询缓存种检索结果,而不是再次分析和执行上次的查询.这样就大大提高了性能,节省时间. 1.配置查询缓存 修改配置文 ...

  9. Mysql查询缓存Query_cache的功用

    MySQL的查询缓存并非缓存执行计划,而是查询及其结果集,这就意味着只有相同的查询操作才能命中缓存,因此MySQL的查询缓存命中率很低,另一方面,对于大结果集的查询,其查询结果可以从cache中直接读 ...

随机推荐

  1. FTP FtpWebRequest 异步上传文件

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...

  2. akka设计模式系列-慎用ask

    慎用ask应该是Akka设计的一个准则,很多时候我们应该禁用ask.之所以单独把ask拎出来作为一篇博文,主要是akka的初学者往往对ask的使用比较疑惑. "Using ask will ...

  3. RHEL6.5安装成功ORACLE11GR2之后,编写PROC程序出错解决方法

    1.  proc: error while loading shared libraries: libclntsh.so.11.1: cannot open shared object file: N ...

  4. zookeeper集群安装及使用详解

    1. Zookeeper简介 ZooKeeper是一个开源的分布式框架,提供了协调分布式应用的基本服务.它向外部应用暴露一组通用服务——分布式同步(Distributed Synchronizatio ...

  5. Excel工作常用(一)-生成序列与删除空行

    整理一些工作中,本人经常用到的一些Excel操作 1.自动生成序列 [注]选择 第一格 和 第二格 之后,在右下角出现十字的时候,在往下拉 2.删除空行 方式一,先找出所有空行,在删 [缺点]数据多的 ...

  6. Tomcat发布项目,域名访问

    域名访问项目 1,去掉访问路径的端口号: 找到 Tomcat 下的 conf 文件中的 server.xml,找到 8080 修改成 80, 2,项目绑定域名: <Host name=" ...

  7. jQuery中关于如何使用animate自定义动画

    动画 animate() 01.animate()方法的简单使用 有些复杂的动画通过之前学到的几个动画函数是不能够实现,这时候就是强大的animate方法了. 操作一个元素执行3秒的淡入动画,对比下一 ...

  8. Ajax——模板引擎

    模板介绍 1.必要性:ajax请求从服务器接收到大量数据,此时再用普通的字符串拼接是很耗费时间的,这时候模板就有其必要性 2.便利性:插件套用,现在有很多主流的模板插件:BaiduTemplate(百 ...

  9. 回顾Google IO 2016 -Keynote【图解】

    Google IO大会倒计时进行中~~ 两名演奏者在使用高空“古筝”. 最后5秒倒计时~~~~全场轰动~ 倒计时结束,IO大会正式开始.屏幕中,一个人把纯白的唱片放入唱片机中. 然后欢快的音乐响起,台 ...

  10. kesci---2019大数据挑战赛预选赛---情感分析

    一.预选赛题------文本情感分类模型 本预选赛要求选手建立文本情感分类模型,选手用训练好的模型对测试集中的文本情感进行预测,判断其情感为「Negative」或者「Positive」.所提交的结果按 ...