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

MySql 缓存查询原理与缓存监控 和 索引监控的更多相关文章

  1. mysql的查询缓存模式介绍

    mysql的查询缓存 查询是数据库技术中最常用的操作.查询操作的过程比较简单,首先从客户端发出查询的SQL语句,数据库服务端在接收到由客户端发来的 SQL语句后, 执行这条SQL语句,然后将查询到的结 ...

  2. mysql的查询缓存

        查询是数据库技术中最常用的操作.查询操作的过程比较简单,首先从客户端发出查询的SQL语句,数据库服务端在接收到由客户端发来的 SQL语句后, 执行这条SQL语句,然后将查询到的结果返回给客户端 ...

  3. mysql的查询使用explain的讲解

    摘自:http://www.jb51.net/article/33736.htm 在 explain的帮助下,您就知道什么时候该给表添加索引,以使用索引来查找记录从而让select 运行更快.如果由于 ...

  4. MySQL加速查询速度的独门武器:查询缓存

    [导读] 与朋友或同事谈到MySQL查询缓存功能的时候,个人喜欢把查询缓存功能Query Cache比作荔枝, 是非常营养的东西,但是一次性吃太多了,就容易上火而流鼻血,虽然不是特别恰当的比喻,但是有 ...

  5. mysql数据库查询缓存总结

    概述 查询缓存(Query Cache,简称QC),存储SELECT语句及其产生的数据结果.闲来无事,做一下这块的总结,也做个备忘! 工作原理 查询缓存工作原理如下: 缓存SELECT操作的结果集和S ...

  6. mysql 慢查询,查询缓存,索引,备份,水平分割

    1.开启慢查询 在mysql的配置文件my.ini最后增加如下命令 [mysqld]port=3306slow_query_log =1long_query_time = 1 2.查看慢查询记录 默认 ...

  7. MySQL关闭查询缓存(QC)的两种方法

    MySQL Query Cache 会缓存select 查询,安装时默认是开启的,但是如果对表进行INSERT, UPDATE, DELETE, TRUNCATE, ALTER TABLE, DROP ...

  8. #研发解决方案#discache-分布式缓存查询与管理系统

    郑昀 基于马海元和闫小波的文档 关键词:memcached.redis.分布式缓存.控制台.反序列化.Java 本文档适用人员:研发和运维员工 提纲: 如何查看缓存里的序列化数据? 批量删除来一个 监 ...

  9. 关系型数据库工作原理-快速缓存(翻译自Coding-Geek文章)

    本文翻译自Coding-Geek文章:< How does a relational database work>. 原文链接:http://coding-geek.com/how-dat ...

随机推荐

  1. Storm系列二: Storm拓扑设计

    Storm系列二: Storm拓扑设计 在本篇中,我们就来根据一个案例,看看如何去设计一个拓扑, 如何分解问题以适应Storm架构,同时对Storm拓扑内部的并行机制会有一个基本的了解. 本章代码都在 ...

  2. windows7下部署tomcat

    需要准备的软件: 1.JDK 安装程序 2.Tomcat 安装程序 JDK安装步骤: 安装方式:使用安装程序进行安装.使用JDK文件夹,免安装,以下步骤使用的是文件夹免安装,只需配置环境变量 配置环境 ...

  3. J01-Java IO流总结一 《异常捕获》

    下面演示java中处理I/O操作时的异常的正确方式,总结自书籍,书名忘啦~ 先看一种不正确的方式 方式一: import java.io.FileInputStream; import java.io ...

  4. 剑指offer二十七之字符串的排列

    一.题目 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 二.思路 我们 ...

  5. 解决ssh/scp报错:Someone could be eavesdropping on you right now (man-in-the-middle attack)!

    主要现象:ssh/scp 失败,host key verification failed. # scp /home/iso/********.iso root@192.168.1.***:/home/ ...

  6. 《Android应用性能优化》2——内存、CPU、性能测评

    4.高效使用内存 4.1 说说内存 Android设备的性能主要取决于以下三因素: CPU如何操纵特定的数据类型: 数据和指令需占用多少存储空间: 数据在内存中的布局 4.2 数据类型 int和lon ...

  7. Scala的下载和安装(本地)

    前言 Scala版本的选法: 目前,Kafka库和JDBC并不支持Scala2.11的编译,以及结合大多数人的使用请来看.         scala2.10.*为主,在这,scala2.10.4版本 ...

  8. Promise对象的含义和基本用法

    1.Promise的含义 Promise是异步编程的一种解决方案,比传统的解决方案(回调函数和事件)更合理更强大. 所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件 (通常是一 ...

  9. Ethereum 源码分析之 accounts

    一.Account // Account represents an Ethereum account located at a specific location defined // by the ...

  10. C++调用C代码的两种方式

    由于C++支持函数重载,在编译函数代码的时候会加上参数类型的信息,而C编译只有函数名信息,导致C++直接调用C代码在链接的时候会出现函数未定义的问题.解决这种问题有两种方法.方法一:在写C代码的时候考 ...