MySQL查询缓存
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查询缓存的更多相关文章
- mysql查询缓存参数
由人说mysql查询缓存是鸡肋,也许吧,但还是要看场景: 查询缓存: 开启查询缓存:/etc/my.cnfquery_cache_type=1 重启
- 启用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 查询缓存总结
Mysql 查询缓存总结 MySQL查询缓存解释 缓存完整的SELECT查询结果,也就是查询缓存.保存查询返回的完整结果.当查询命中该缓存,mysql会立刻返回结果,跳过了解析.优化和执行阶段, 查询 ...
- Mysql查询缓存碎片、缓存命中率及Nagios监控
Mysql 的优化方案,在互联网上可以查找到非常多资料,今天对Mysql缓存碎片和命中率作了详细了解,个人作了简单整理. 一.Mysql查询缓存碎片和缓存命中率. mysql> SHOW STA ...
- RDS for MySQL查询缓存 (Query Cache) 的设置和使用
https://help.aliyun.com/knowledge_detail/41717.html?spm=5176.7841698.2.11.aCvOXJ RDS for MySQL查询缓存 ( ...
- 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 ...
随机推荐
- extern引发的闹剧
最近一个朋友让我帮他解决一个问题,由于源代码不方便贴出来,所以就自己写了个demo把问题重现一次 1.新建一个application,添加一个继承于NSObject的类 本来是随便写的,就将此类命名为 ...
- xcode意外退出
完全不明所以的频繁退出 第一种 排除SVN冲突 在团队开发中,SVN冲突是最常见的了,程序异常时查看SVN文件冲突基本上成了本能. 排除SVN冲突 首先,右键主项目文件即xcodeproj文件,显示包 ...
- 又出头了,又SB了
前些天买冰箱的事啊.. 前些天卡激活的事啊.. 今天门禁的事情啊.. 自己真是大傻逼啊.. 自己表情非常难看.注意保持乐观帅气的笑容.
- Windows Server 2003 IIS6.0+PHP5(FastCGI)+MySQL5环境搭建教程
准备篇 一.环境说明: 操作系统:Windows Server 2003 SP2 32位 PHP版本:php 5.3.14(我用的php 5.3.10安装版) MySQL版本:MySQL5.5.25 ...
- Codeforces Round #323 (Div. 1) A. GCD Table
A. GCD Table time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
- 安装lnmp一键安装包(转)
系统需求: CentOS/RHEL/Fedora/Debian/Ubuntu/Raspbian Linux系统 需要3GB以上硬盘剩余空间 128M以上内存,Xen的需要有SWAP,OpenVZ的另外 ...
- Android Activity中获取当前焦点的控件,自动化输入EditText
获取焦点的view对象 View view=getWindow().getDecorView().findFocus(); 如果是EditText if(view instanceof EditTex ...
- window下安装jupyter
1.Install [Anaconda](https://docs.continuum.io/anaconda/install#anaconda-install) 实际上安装了anaconda就已经安 ...
- 利用python实现爬虫爬取某招聘网站,北京地区岗位名称包含某关键字的所有岗位平均月薪
#通过输入的关键字,爬取北京地区某岗位的平均月薪 # -*- coding: utf-8 -*- import re import requests import time import lxml.h ...
- 搭建Android开发环境简要步骤
(一)安装JDK JDK下载地址 http://www.oracle.com/technetwork/java/javase/downloads/index.html 在Linux终端输入如下命令,设 ...