MySql 缓存查询原理与缓存监控和索引监控介绍


Posted in MySQL onJuly 02, 2021

查询缓存

1.查询缓存操作原理

mysql执行查询语句之前,把查询语句同查询缓存中的语句进行比较,且是按字节比较,仅完全一致才被认为相同。如下,这两条语句被视为不同的查询

SELECT * FROM tb1_name

Select * from tb1_name

1)不同数据库、不同协议版本,或字符集不同的查询被视为不同的查询并单独缓存。

2)以下两种类型的查询不被缓存

a.预处理语句

b.嵌套查询的子查询

3)从查询缓存抓取查询结果前,mysql检查用户对查询涉及的所有数据库和表是否有查询权限,如果没有则不使用缓存查询结果。

4)如果从缓存查询返回一个查询结果,服务器递增Qcache_hits状态变量,而不是Com_select

5)如果表改变,所有使用了该表的缓存查询变成不合法,从缓存移除。表可能被多种类型的语句改变,比如INSERT, UPDATE, DELETE, TRUNCATE TABLE, ALTER TABLE, DROP TABLE, 或DROP DATABASE.

参考连接:

http://dev.mysql.com/doc/refman/4.1/en/query-cache-operation.html

2.查看是否开启了缓存查询

SHOW VARIABLES LIKE 'have_query_cache';

MySql <wbr>缓存查询原理与缓存监控 <wbr>和 <wbr>索引监控

3.从查询缓存中移除所有查询缓存

RESET QUERY CACHE;

4.查询缓存性能监控

SHOW STATUS LIKE 'Qcache%'

MySql <wbr>缓存查询原理与缓存监控 <wbr>和 <wbr>索引监控

输出说明:

Qcache_free_blocks:查询缓存中的空闲内存块

Qcache_free_memory:查询缓存的空闲内存数量

Qcache_hits:查询缓存命中数量

Qcache_inserts:添加到查询缓存的查询的数量(不是表示没被缓存而进行的读,而是缓存失效而进行的读)

Qcache_lowmen_prunes:因内存太低,从缓存查询中删除的查询的数量

Qcache_not_chached:未缓存查询的数量(未被缓存、因为querey_cache_type设置没被缓存)

Qcache_queries_in_cache:缓存查询中注册的查询的数量

Qcache_total_blocks:查询缓存中的内存块总数

SELECT查询总数:

Com_select+Qcache_hits+ 解析错误的查询数(queries with errors found by parser)

其中,Com_select表示未命中缓存数,Qcache_hits表示缓存命中数

Com_select计算公式:

Qcache_inserts+Qcache_not_cached+权限检查错误数(queries with errors found during the column-privileges check)

索引监控

SHOW STATUS LIKE 'handler_read%';

MySql <wbr>缓存查询原理与缓存监控 <wbr>和 <wbr>索引监控

输出说明:

Handler_read_first

The number of times the first entry in an index was read. If this value is high, it suggests that the server is doing a lot of full index scans; for example, SELECT col1 FROM foo, assuming that col1 is indexed

索引中的第一项(the first entry in an index)被读取的次数,如果该值很高,那表明服务器正在执行很多全索引扫描,例如 SELECT col1 FROM foo, 假设col1上建立了索引

Handler_read_key

The number of requests to read a row based on a key. If this value is high, it is a good indication that your tables are properly indexed for your queries.

基于某个键读取一行的请求次数。如果该值很高,那很好的说明了,对于执行的请求,表采用了适当的索引。

Handler_read_next

The number of requests to read the next row in key order. This value is incremented if you are querying an index column with a range constraint or if you are doing an index scan.

根据键顺序,读取下一行的请求次数。如果你正在查询一个带一系列约束的索引列或者正在执行索引扫描时,该值会增加

Handler_read_prev

The number of requests to read the previous row in key order. This read method is mainly used to optimize ORDER BY ... DESC

根据键的顺序,请求读取前一行的次数。该读取方法主要用于优化 ORDER BY ... DESC

Handler_read_rnd

The number of requests to read a row based on a fixed position. This value is high if you are doing a lot of queries that require sorting of the result. You probably have a lot of queries that require MySQL to scan entire tables or you have joins that do not use keys properly.

在固定位置读取一行的请求次数。该值如果很高,那么说明正在执行许多要求对结果集排序的查询。可能在执行有许多要求全表扫描的查询,或没使用适合键的联合查询。

Handler_read_rnd_next

The number of requests to read the next row in the data file. This value is high if you are doing a lot of table scans. Generally this suggests that your tables are not properly indexed or that your queries are not written to take advantage of the indexes you have.

读取数据文件中下一行的请求次数。该值很高,表明正在执行很多全表扫描。通常表明表没使用适当的索引或者查询请求没利用现成的索引。

参考连接:

http://dev.mysql.com/doc/refman/5.7/en/dynindex-statvar.html#statvar-index-H

参考连接:

http://dev.mysql.com/doc/refman/4.1/en/server-status-variables.html

http://dev.mysql.com/doc/refman/4.1/en/query-cache-status-and-maintenance.html

到此这篇关于MySql 缓存查询原理与缓存监控和索引监控介绍的文章就介绍到这了,更多相关MySql 缓存查询内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
MySQL命令行操作时的编码问题详解
Apr 14 MySQL
仅用一句SQL更新整张表的涨跌幅、涨跌率的解决方案
May 06 MySQL
MySQL如何构建数据表索引
May 13 MySQL
Mysql8.0递归查询的简单用法示例
Aug 04 MySQL
Mysql案例刨析事务隔离级别
Sep 25 MySQL
Mysql binlog日志文件过大的解决
Oct 05 MySQL
MySQL中的引号和反引号的区别与用法详解
Oct 24 MySQL
Linux7.6二进制安装Mysql8.0.27详细操作步骤
Nov 27 MySQL
MySQL数据库⾼可⽤HA实现小结
Jan 22 MySQL
mysql的Buffer Pool存储及原理
Apr 02 MySQL
MySQ InnoDB和MyISAM存储引擎介绍
Apr 26 MySQL
MySQL中的 inner join 和 left join的区别解析(小结果集驱动大结果集)
May 08 MySQL
mysql连接查询中and与where的区别浅析
低版本Druid连接池+MySQL驱动8.0导致线程阻塞、性能受限
Jul 01 #MySQL
MySQL 8.0 驱动与阿里druid版本兼容问题解决
MySQL query_cache_type 参数与使用详解
Jul 01 #MySQL
mysql 数据插入优化方法之concurrent_insert
Jul 01 #MySQL
MySQL的Query Cache图文详解
MySQL高速缓存启动方法及参数详解(query_cache_size)
Jul 01 #MySQL
You might like
给apache2.2加上mod_encoding模块後 php5.2.0 处理url出现bug
2007/04/12 PHP
php递归实现无限分类生成下拉列表的函数
2010/08/08 PHP
php简单对象与数组的转换函数代码(php多层数组和对象的转换)
2011/05/18 PHP
解析用PHP读写音频文件信息的详解(支持WMA和MP3)
2013/05/10 PHP
php通过排列组合实现1到9数字相加都等于20的方法
2015/08/03 PHP
百度地图经纬度转换到腾讯地图/Google 对应的经纬度
2015/08/28 PHP
visual studio code 调试php方法(图文详解)
2017/09/15 PHP
PHP中递归的实现实例详解
2017/11/14 PHP
基于node.js的快速开发透明代理
2010/12/25 Javascript
js FLASH幻灯片字符串中有连接符&的处理方法
2012/03/01 Javascript
浅析javascript中function 的 length 属性
2014/05/27 Javascript
js,jquery滚动/跳转页面到指定位置的实现思路
2014/06/03 Javascript
快速实现JS图片懒加载(可视区域加载)示例代码
2017/01/04 Javascript
Angular.Js中过滤器filter与自定义过滤器filter实例详解
2017/05/08 Javascript
理解 JavaScript EventEmitter
2018/03/29 Javascript
Vue+ElementUI项目使用webpack输出MPA的方法
2019/08/27 Javascript
autojs 蚂蚁森林能量自动拾取即给指定好友浇水的实现方法
2020/05/03 Javascript
微信小程序返回上一级页面的实现代码
2020/06/19 Javascript
深入解析Python的Tornado框架中内置的模板引擎
2016/07/11 Python
Python实现获取命令行输出结果的方法
2017/06/10 Python
python微信跳一跳系列之棋子定位像素遍历
2018/02/26 Python
tensorflow模型继续训练 fineturn实例
2020/01/21 Python
python分别打包出32位和64位应用程序
2020/02/18 Python
python实现ftp文件传输功能
2020/03/20 Python
Python中的xlrd模块使用原理解析
2020/05/21 Python
Django web自定义通用权限控制实现方法
2020/11/24 Python
HTML5全屏(Fullscreen)API详细介绍
2015/04/24 HTML / CSS
P/Invoke是什么
2015/07/31 面试题
战友聚会主持词
2014/04/02 职场文书
《果园机器人》教学反思
2014/04/13 职场文书
遵纪守法演讲稿
2014/05/23 职场文书
党员志愿者活动方案
2014/08/28 职场文书
幼儿园个人总结
2015/02/28 职场文书
婚礼上证婚人致辞
2015/07/28 职场文书
用人单位的规章制度,怎样制定才是有效的?
2019/07/09 职场文书
高性能跳频抗干扰宽带自组网电台
2022/02/18 无线电