MySql缓存查询原理与缓存监控 And 索引监控

by:授客 QQ1033553122

查询缓存

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';

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

RESET QUERY CACHE;

4.查询缓存性能监控

SHOW STATUS LIKE 'Qcache%'

输出说明:

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%';

输出说明:

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

转载于:https://www.cnblogs.com/shouke/p/10157911.html

MySql 缓存查询原理与缓存监控 和 索引监控相关推荐

  1. mysql 缓存监控_MySql 缓存查询原理与缓存监控 和 索引监控

    MySql缓存查询原理与缓存监控 And 索引监控 by:授客 QQ:1033553122 查询缓存 1.查询缓存操作原理 mysql执行查询语句之前,把查询语句同查询缓存中的语句进行比较,且是按字节 ...

  2. MySQL子查询原理分析

    01 前言 子查询,通俗解释就是查询语句中嵌套着另一个查询语句.相信日常工作中接触到 MySQL 的同学都了解或使用过子查询,但是具体它是怎样实现的呢? 查询效率如何? 这些恐怕好多人就不太清楚了,下 ...

  3. mysql 分组查询原理,MySQL分組查詢Group By實現原理詳解

    由於GROUP BY 實際上也同樣會進行排序操作,而且與ORDER BY 相比,GROUP BY 主要只是多了排序之后的分組操作.當然,如果在分組的時候還使用了其他的一些聚合函數,那么還需要一些聚合函 ...

  4. 任正非:为什么华为选择与西工大合作,而没选清华北大,mysql连接查询原理

    西工大同清北等13所高校一样,在今年的5月22日被美国商务部列入实体名单,同时被限制使用美国的相关正版软件,而且很多之前和美国的合作也终止,不能用一些软件,同时也不能购买许多的美国重要零部件. 导致西 ...

  5. mysql41 sphinx_抛弃mysql模糊查询,使用sphinx做专业索引

    Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,PostgreSQL做全文搜索,提供比数据库本身更专业的搜索功能特别为MySQL也设计了一个存储引擎插件,从此抛弃模糊查询吧. Sphi ...

  6. mysql条件查询出现or连接时会使用索引的场景

    在做sql优化时,通常会避免使用or来进行条件连接,是因为大多数情况下or的条件连接会导致sql查询进行全表扫描而不会使用索引去查询.但并不是所有使用or的场景都会全表扫描,有些场景下使用or依旧会走 ...

  7. 第四章 缓存查询(一)

    文章目录 第四章 缓存查询(一) 缓存查询提高了性能 创建缓存查询 动态SQL的缓存查询名称 嵌入式SQL的缓存查询名称 单独的缓存查询 文字替换 DynamicSQLTypeList Comment ...

  8. Mysql查询原理、计算属性理解

    例如下面的是user表:如果执行 SELECT username,age FROM user WHERE uid=2 mysql的查询原理应该是什么样的呢? | uid | username| age ...

  9. 【5. MySQL 的执行原理】

    MySQL 的执行原理 单表访问之索引合并(本质是主键索引的合并) ​ 我们前边说过 MySQL 在一般情况下执行一个查询时最多只会用到单个二级 索引,但存在有特殊情况,在这些特殊情况下也可能在一个查 ...

最新文章

  1. .NET再出发!20岁生日快乐
  2. LINQ 的标准查询操作符
  3. 20200308: 生成每种字符都是奇数个的字符串灯泡开关 III(leetcode5352-5353)
  4. java.lang.IllegalArgumentException: node to traverse cannot be null! HQL语法问题
  5. Codeforces Round #161 (Div. 2) B. Squares
  6. spring事务传播行为与事务隔离等级
  7. 马斯洛需求的五个层次_运用马斯洛需求层次理论分析《吞噬星空》爽点之第九章...
  8. postgres初始化数据库
  9. CC2540和CC2541蓝牙芯片将升级为蓝牙5.0
  10. 如何将数据库删除干净
  11. 基于android的健康管理系统客户端的设计与实现,基于Android的健康管理系统客户端的设计与实现...
  12. 微信公众号跳转微信小程序,自定义微信跳转标签
  13. Rhythmbox 乱码问题
  14. 51Talk-Level 7 Unit 1 L4
  15. 【2022 CCPC 华为云计算挑战赛】1005 带权子集和 (NTT 优化dp)
  16. easyui treegrid php,jQuery中关于EasyUI的TreeGrid查询功能的实现
  17. 安装snipe-IT遇到的php问题
  18. Java教程:使用POI读取excel文档(根据BV1bJ411G7Aw整理)
  19. 地震桌面演练计算机模拟,地震应急处置演练平台环境编辑器及导演组客户端的设计与实现...
  20. 运动规划学习笔记4——探索OMPL

热门文章

  1. 对话框找不到WM_ERASEBKGND消息的解决方法与对话框背景图片的载入方法
  2. 屏蔽基于对话框的MFC程序中按下ESC关闭窗口的功能
  3. el-table处理某一行样式;el-table表格row-class-name无效原因;el-table格式化某行样式和数据
  4. react学习(35)----getFieldDecorator will override value
  5. react学习(5)----通过设置初始值控制页面render渲染
  6. react学习(3)----不能在该位置用setstate
  7. 前端学习(2999):vue+element今日头条管理--element导入
  8. 前端学习(2354):image组件的基本使用
  9. 前端学习(1875)vue之电商管理系统电商系统之vue代码提交到码云
  10. 前端学习(932):mouseenter和mouseover区别