MySql Query Cache 查询缓存介绍(1)
MySql Query Cache 和 Oracle Query Cache 是不同的, Oracle Query Cache 是缓存执行计划的,而MySql Query Cache 不缓存执行计划而是整个结果集。缓存整个结果集的好处不言而喻,但由于缓存的是结果集因此Query必须是完全一样的,这样带来的后果就是平均 Hit Rate 命中率一般不会太高。 Query Cache 对于一些小型应用程序或者数据表的数据量不大的情况下效果是最为明显的。
作为一个新的特性,MySql Query Cache 有什么特典和局限呢? 咱一个一个来说:
1、Cache 机制对应用程序是透明的。在应用程序中只是改变查询语句的语义,也能得到缓存中的查询结果集。如果你没有使用 query_cache_wlock_invalidate=ON 来提示MySql 锁表将要进行写操作,那么此时的查询即使表在锁Lock状态下或者预备更新的状态下,仍然可以从缓存中获得结果集;
2、只缓存整个查询结果集,即对子查询,内联视图和部分UNION的查询是不缓存的;
3、缓存机制工作在Packet 级别,第二项的只缓存整个查询结果集就是因为局限于这个机制的原因。由于没有额外的转换和处理,所以保证缓存结果集返回能够非常快;
4、缓存处理在解析查询前进行,保证缓存高性能的一个原因就是查询缓存在执行查询解析前先查找是否已经存在缓存,如果已经存在查询缓存,则直接返回结果集。
5、查询必须绝对完全同,由于在查找缓存是否存在前不进行查询解析(Query Parser)所以查询并没有经过规范化处理(Normalized),因此缓存查找的过程是按字节顺序进行的 ( Byte by byte )。更具体点说吧:在每次查询时包不同的注释、多余的空格以及大小写不同等等,都不会指向同一个缓存结果集。
6、只有 SELECT 语句被缓存。 插入、删除、更新当然不需要进行缓存了,同时 SHOW 命令和 存储过程 stored procedure (包括存储过程中的SELECT)也不会进入缓存结果集。
7、空格和注释不要出现在查询语句的最前面,当查找缓存时第一个字幕如果不是"S" ,就会停止查询缓存结果集了。第5、6项已经解释过了;
8、不支持预备查询 prepared statement 和游标 cursors 。 (? )
9、或许不支持事务处理。(?)
10、查询结果必须完全一致,才能进入缓存结果集。比如:查询语句中有 UUID , RAND , CONNECTION_ID 等会动态改变查询结果集的函数,都不会进入缓存结果集的;
11、查询缓存失效的粒度级别的是表,当表被修改时,所有与改表相关的缓存立即失效(invalidation )。
12、过长时间的查询缓存容易造成碎片fragmentation ,这一点和Windows的磁盘管理的碎片整理类似,长时间查询缓存产生的碎片对执行效率有一定影响。可以把查询缓存碎片看作是是查询缓存可用内存(Qcache_free_memory)的块(Qcache_free_blocks )。FLUSH QUERY CACHE 命令可以削除这种情况。
13、设定适当大小的查询缓存用的内存,由于前面提到的一些原因,一般情况下MySql 的查询缓存机制对内存的需求不可能无限增长,因此设定一个适当的查询缓存内存值是比较经济的做法。可以通过查看 Qcache_free_memory 和 Qcache_lowmem_prunes 的状态来进行适当设置。
14、查询缓存的运行模式,默认情况下开启缓存后MySql 的缓存机制对全局的有效,如果你只想对特定的查询语句使用缓存,可以通过把 query_cache_type 设定为 “DEMAND” 并且在查询语句中加入: SQL_CACHE 来进行,比如:SELECT SQL_CACHE DomoloSeoHelper from domolo where author='tianchunfeng' 。
上面为你介绍了 Mysql 查询缓存的一些基本特点,那么如何监控Mysql 查询缓存的运行时状态呢?比如监控查询缓存的命中率,调节查询缓存的内存大小等等数据。
可以使用下面的命令:
mysql> show status like ‘Qcache%’;
输出:
+-------------------------+----------+
| Variable_name | Value |
+-------------------------+----------+
| Qcache_free_blocks | 1 |
| Qcache_free_memory | 16766912 |
| Qcache_hits | 3 |
| Qcache_inserts | 1 |
| Qcache_lowmem_prunes | 0 |
| Qcache_not_cached | 6 |
| Qcache_queries_in_cache | 1 |
| Qcache_total_blocks | 4 |
+-------------------------+----------+
具体解释参考: the MySQL Query Cache documentation。
下一篇为你介绍MySql 查询缓存的调优和应用环境。
参考资料:
http://dev.mysql.com/doc/refman/5.0/en/query-cache.html
http://www.mysqlperformanceblog.com/2006/07/27/mysql-query-cache/
http://www.cyberciti.biz/tips/how-does-query-caching-in-mysql-works-and-how-to-find-find-out-my-mysql-query-cache-is-working-or-not.html
分享到:
相关推荐
这是由于MySQL团队认为查询缓存的性能提升在大多数情况下并不显著,反而可能导致额外的内存开销和维护成本。因此,如果你的Mycat配置仍然试图设置`query_cache_size`,这将导致连接失败或运行时错误。 Mycat 1.6.4...
会发现其变量have_query_cache的值是yes,MYSQL初学者很容易以为这个参数为YES就代表开启了查询缓存,实际上是不对的,该参数表示当前版本的MYSQL是否支持Query Cache,实际上是否开启查询缓存是看另外一个参数的值:...
- `query_cache_type` 设置为 1 表示启用查询缓存。 - `query_cache_limit` 设定单个查询缓存的最大大小。 - `query_cache_size` 定义查询缓存的总大小。 ##### 监控查询缓存 可以通过执行 SQL 命令来监控查询缓存...
- 要清空MySQL的查询缓存,可以使用`RESET QUERY CACHE`命令。这将删除所有已缓存的查询和结果,确保下一次查询不依赖于之前的缓存状态。 3. **查询缓存的优缺点**: - 优点:显著提高重复查询的速度,减轻数据库...
* Query Cache 优化:Query Cache 是 MySQL 的一个重要功能,合理设置 Query Cache 可以提高数据库的性能。 * 创建合理的索引:合理创建单列索引及组合索引,可以提高数据库的性能。 * 优化表结构:合理设计表结构,...
mysql缓存查询和设置global_query_cache_size
MySQL数据库系统在处理查询时,为了提高性能,使用了多种缓存机制,其中最常见的是查询缓存(Query Cache)。本文将深入探讨MySQL的查询缓存功能,以及如何通过全局变量`global_query_cache_size`来调整其大小。 ...
此外,还会涉及如何通过调整MySQL的配置参数来优化缓存使用,例如`query_cache_size`、`innodb_buffer_pool_size`等。 5. MySQL缓存实验报告 实验报告会记录实施的缓存优化实践,包括修改配置、监控性能变化、对比...
### MySQL缓存优化详解 ...以上是关于 MySQL 存储引擎的选择以及查询缓存配置与优化的基本介绍。通过对存储引擎的选择和合理配置查询缓存,可以有效地提高 MySQL 数据库的性能和响应速度,满足不同业务场景的需求。
可将如下语句 query_cache_size = 268435456 query_cache_type = 1 query_cache_limit = 1048576 存放到/etc/my.cnf文件的[mysqld]下 然后重启mysql数据库 service mysqld restart 就会启动mysql的缓存机制Query ...
MySQL之前有一个查询缓存Query Cache,从8.0开始,不再使用这个查询缓存,那么放弃它的原因是什么呢?在这一篇里将为您介绍。 MySQL查询缓存是查询结果缓存。它将以SEL开头的查询与哈希表进行比较,如果匹配,则返回...
MySQL的Query Cache是一种用于优化数据库性能的机制,它主要针对`SELECT`查询,旨在减少对磁盘I/O的依赖,通过缓存查询结果来提高数据检索速度。在MySQL中,Query Cache的工作原理基于SQL语句的精确匹配。当一个`...
查询缓存的开启与否、大小、限制以及内存分配单元等可以通过`show variables like '%query_cache%'`查看。值得注意的是,查询缓存的使用需谨慎,因为数据更新可能导致缓存失效,频繁的更新操作可能使查询缓存的效果...
MSQL 问题集合中关于 Query Cache(查询缓存)的讨论非常重要。在线上环境中,到底要不要开启 query cache 是一个需要仔细考虑的问题。 Query Cache 的优点是可以存储 SELECT 语句及其产生的数据结果,特别适用于...
Mysql 查询缓存 查询缓存的作用就是当查询接收到一个和之前同样的查询,服务器将会从查询缓存种检索结果,而不是再次分析和执行上次的查询。这样就大大提高了性能,节省时间。 1.配置查询缓存 修改配置文件,修改...
- **设置查询缓存大小**:`SET GLOBAL query_cache_size = 100000000;` (设置为100MB) - **监控查询缓存效率**:`SHOW STATUS LIKE 'Qcache%';` ##### 2. InnoDB缓存 - **定义**:InnoDB是MySQL的默认存储引擎,...