MySQL查询缓存

用于保存MySQL查询语句返回的完整结果,被命中时,MySQL会立即返回结果,省去解析、优化和执行等阶段。

如何检查缓存?

MySQL保存结果于缓存中:

把SELECT语句本身做hash计算,计算结果为key,查询结果作为value。

不会被缓存的数据:

查询语句中有一些不确定数据时,不会缓存,例如NOW(),CURRENT_TIME(),一般来说,如果查询中包含自定义函数、存储函数、用户变量、临时表、mysql库中系统表、或者任何包含权限的表,一般都不会被缓存。

缓存会带来额外开销:

1、每个查询都得先检查是否命中;

2、检查结果要先缓存;

与缓存相关的变量:

查看缓存变量SHOW GLOBAL VARIABLES LIKE 'query_cache%';

query_cache_limit:单个缓存对象的最大值,超出的不缓存,手动使用SQL_NO_CACHE可以人为避免尝试缓存返回结果超出此参数限定值的语句。

query_cache_min_res_unit:存储缓存的最小内存块;计算方法:(query_cache_size-Qcache_free_memory)/Qcache_queries_in_cache

query_cache_size:总空间,单位为字节,大小必须是1024倍数。MySQL启动时,会一次分配并立即初始化这里指定大小的内存空间,这意味着,如果修改此大小,会清空缓存,并重新初始化;

query_cache_type:查询缓存类型;是否开启缓存功能,开启方式有三种{ON|OFF|DEMAND};

DEMAND:意味着SELECT语句明确使用SQL_CACHE选项是才会缓存;query_cache_wlock_invalidate:如果某个数据表被其他用户连接锁住了,是否仍然从缓存中返回结果,OFF表示返回。

如何判断命中率:

SHOW GLOBAL STATUS LIKE 'Qcache%';

Qcache_free_blocks:空闲块数

Qcache_free_memory:空闲空间

Qcache_hits:命中次数

Qcache_inserts:向缓存空间中写入缓存的次数

Qcache_lowmem_prunes:因为内存小,腾出内存的次数

Qcache_not_cached:没被缓存的个数

Qcache_queries_in_cache:在缓存中缓存的插入的查询的个数

Qcache_total_blocks:总块数

碎片整理:FLUSH QUERY_CACHE

清除缓存:RESET QUERY_CACHE

计算命中率:

SHOW GLOBAL STATUS WHERE Variable_name='Qcache_hits' OR Variable_name='Com_select';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| Com_select    | 10     |

| Qcache_hits   | 0      |

+---------------+-------+

Qcache_hits/( Com_select+ Qcache_hits)

还需要参考命中和写入的比率,即Qcache_hits/ Qcache_inserts的值,此值如果能大于3:1,则表明缓存也是有效的,能达到10:1,为比较理想的情况。如果命中率很低,比值也徘徊在1:1,那说明缓存没什么卵用,还是关了吧。

缓存优化思路:

使用缓存时如何能够让缓存命中,提高缓存的有效性:

1、批量写入而非多次单个写入,这样即可仅一次的影响缓存

2、过大的缓存空间,可能会使大量的缓存失效时导致造成服务器假死,所以缓存空间不宜过大

3、必要时,使用SQL_NO_CACHE手动控制缓存

4、对写密集型的应用场景来说,禁用缓存反而能提高性能

MySQL查询缓存的更多相关文章

  1. mysql查询缓存参数

    由人说mysql查询缓存是鸡肋,也许吧,但还是要看场景: 查询缓存: 开启查询缓存:/etc/my.cnfquery_cache_type=1 重启

  2. 启用MySQL查询缓存

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

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

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

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

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

  5. Mysql 查询缓存总结

    Mysql 查询缓存总结 MySQL查询缓存解释 缓存完整的SELECT查询结果,也就是查询缓存.保存查询返回的完整结果.当查询命中该缓存,mysql会立刻返回结果,跳过了解析.优化和执行阶段, 查询 ...

  6. Mysql查询缓存碎片、缓存命中率及Nagios监控

    Mysql 的优化方案,在互联网上可以查找到非常多资料,今天对Mysql缓存碎片和命中率作了详细了解,个人作了简单整理. 一.Mysql查询缓存碎片和缓存命中率. mysql> SHOW STA ...

  7. RDS for MySQL查询缓存 (Query Cache) 的设置和使用

    https://help.aliyun.com/knowledge_detail/41717.html?spm=5176.7841698.2.11.aCvOXJ RDS for MySQL查询缓存 ( ...

  8. Mysql查询缓存研究

    转载声明:本文为DBA+社群原创文章,转载必须连同本订阅号二维码全文转载,并注明作者名字及来源:DBA+社群(dbaplus). http://mp.weixin.qq.com/s?__biz=MzI ...

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

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

随机推荐

  1. ASP.NET DAY1

    <!-- AutoEventWireup,CodeBehind,Inherits等属性可省略, Language属性为必须项 --> <%@ Page Language=" ...

  2. 用Advanced Installer制作DotNetBar for Windows Forms 12.0.0.1_冰河之刃重打包版详解

    关于 DotNetBar for Windows Forms 12.0.0.1_冰河之刃重打包版 --------------------11.8.0.8_冰河之刃重打包版-------------- ...

  3. linux环境下安装tomcat并配置tomcat日志分割

    1.直接解压apache-tomcat-7.0.69.tar.gz 存放在/home目录下 根据需要自定义tomcat名称 mv apache-tomcat-7.0.69 Tomcat7 2.解压cr ...

  4. webstorm 10 更改默认端口

    快捷键 ctrl + Alt + s :打开配置 如图下可以更改 默认端口.快捷键可能跟qq的快捷键冲突,可以关闭qq来设置端口

  5. Java IO流

    File类 ·java.io.File类:文件和目录路径名的抽象表示形式,与平台无关 ·File能新建.删除.重命名文件和目录,但File不能访问文件内容本身.如果需要访问文件内容本身,则需要使用输入 ...

  6. 使用共享网卡的NAT模式配置VMware中的CentOS的上网功能

    昨天写了一篇文章总结了前两天折腾VMware 10中的CentOS上网的问题,结果留下一下小瑕疵,就是视频教程中通过共享网卡使用NAT模式配置虚拟机的方法.今天在结合昨天的基础上终于弄明白了这个问题. ...

  7. C#数组全解

    数组概述 C# 数组从零开始建立索引,即数组索引从零开始.C# 中数组的工作方式与在大多数其他流行语言中的工作方式类似.但还有一些差异应引起注意. 声明数组时,方括号 ([]) 必须跟在类型后面,而不 ...

  8. javac找不到或无法加载主类 com.sun.tools.javac.Main

    在安装jdk后或者以前安装了jdk某时使用javac编译java文件时出现找不到或无法加载主类com.sun.tools.javac.Main,这个问题时,网上一般都说是环境变量配置不对,这样的说法其 ...

  9. 字符串数组转为PHP级数组

    先要把字符串处理一下,成为php定义数组的形式,再用eval执行: $str="Array([15] => Array([id] => 2304[fromtype] => ...

  10. ios选取相册视频,过滤掉所有图片!

    imagePicker = [[UIImagePickerController alloc]init]; imagePicker.mediaTypes = [NSArray arrayWithObje ...