MySql Query Cache
我们多知道mysql的查询是有缓存的,MySqlQueryCache不缓存执行计划而是整个结果集。我们要从Cache去中命中我们的查询结果,Query必须是完全一样的,导致的结果是Query改变就无法命中我们的查询,mysql会把改变后的Query作为一个新的Cache。因为mysql缓存的是整个结果集,所以Qcache_hits并不是很高。
1、Cache 机制对应用程序是透明的。
2、只缓存整个查询结果集,即对子查询,内联视图和
部分UNION的查询是
不缓存的。
注:我在执行
部分UNION的时候,观察Qcache_queries_in_cache值也是增加的 不知道是不是和部分UNION的查询是不缓存有点矛盾?请大牛指正 我现在姑且当作union查询是缓存的
3、缓存机制工作在Packet 级别,第二项的只缓存整个查询结果集就是因为局限于这个机制的原因。由于没有额外的转换和处理,所以保证缓存结果集返回能够非常快。
4、缓存处理在解析查询前进行,保证缓存高性能的一个原因就是查询缓存在执行查询解析前先查找是否已经存在缓存,如果已经存在查询缓存,则直接返回结果集。
5、查询必须绝对完全同,由于在查找缓存是否存在前不进行查询解析( Query Parser )所以查询并没有经过规范化处理(Normalized),因此缓存查找的过程是按字节顺序进行的 ( Byte by byte )。更具体点说吧:在每次查询时包不同的注释、多余的空格以及大小写不同等等,都不会指向同一个缓存结果集。
注:sql语句必须完全一致 包括条件的值 如select * from user_id=1 和select * from user_id=2会作为两个不同的缓存
6、只有 SELECT 语句被缓存。 插入、删除、更新当然不需要进行缓存了,同时 SHOW 命令和 存储过程 stored procedure (包括存储过程中的SELECT)也不会进入缓存结果集,
查询缓存失效的粒度级别的是表,当表被修改时,所有与改表相关的缓存立即失效( invalidation )。
注:对同一张表的update、delete、insert操作会清空该表的QueryCache
7、空格和注释不要出现在查询语句的最前面,当查找缓存时第一个字幕如果不是"S" ,就会停止查询缓存结果集了。第5、6项已经解释过了。
注:我试过在SQL前面有空格是可以被缓存的,mysql缓存的时候会自动去掉前面的空格的;
在SQL前面有注释也会被缓存,等同于没有注释,我用的SQL语句如:/**/select
8、不支持预备查询 prepared statement 和 游标 cursors 。?
9、不支持事务处理。?
10、查询结果必须完全一致,才能进入缓存结果集。比如:查询语句中有 UUID , RAND , CONNECTION_ID 等会动态改变查询结果集的函数,都不会进入缓存结果集的。Ok
11、过长时间的查询缓存容易造成碎片 fragmentation ,这一点和Windows的磁盘管理的碎片整理类似,长时间查询缓存产生的碎片对执行效率有一定影响。可以把查询缓存碎片看作是是查询缓存可用内存(Qcache_free_memory)的块(Qcache_free_blocks )。FLUSH QUERY CACHE 命令可以削除这种情况。
12、设定适当大小的查询缓存用的内存,由于前面提到的一些原因,一般情况下MySql 的查询缓存机制对内存的需求不可能无限增长,因此设定一个适当的查询缓存内存值是比较经济的做法。可以通过查看 Qcache_free_memory 和 Qcache_lowmem_prunes 的状态来进行适当设置。
13、查询缓存的运行模式,默认情况下开启缓存后MySql 的缓存机制对全局的有效,如果你只想对特定的查询语句使用缓存,可以通过把 query_cache_type 设定为 “DEMAND” 并且在查询语句中加入: SQL_CACHE 来进行,比如:SELECT SQL_CACHE DomoloSeoHelper from domolo where author='tianchunfeng' 。
==========================================================================
几个命令:
mysql> show status like 'Qcache%'; #查看mysql查询缓存的运行时状态
mysql> reset query cache ;#重置mysql查询缓存
来源:
http://tianchunfeng.spaces.live.com/blog/cns!819E33AA1808A272!315.entry
具体解释参考:
http://dev.mysql.com/doc/refman/5.0/en/query-cache-status-and-maintenance.html
分享到:
相关推荐
会发现其变量have_query_cache的值是yes,MYSQL初学者很容易以为这个参数为YES就代表开启了查询缓存,实际上是不对的,该参数表示当前版本的MYSQL是否支持Query Cache,实际上是否开启查询缓存是看另外一个参数的值:...
然而,当Mycat与MySQL 8.0及以上版本配合使用时,可能会遇到一些兼容性问题,其中“query_cache_size”报错就是典型的例子。 在MySQL 8.0中,查询缓存功能被默认禁用,并且在某些版本中被完全移除。这是由于MySQL...
如果空格是加在query之前,比如是在query的起始处加了空格,这样是丝毫不影响query cache的结果的,mysql认为这是一条query, 而如果空格是在query中,那会影响query cache的结果,mysql会认为是不同的query
这个问题出现的原因在于MySQL 8.0版本中移除了`query_cache`相关的系统变量和功能,因此在使用新版本的JDBC驱动去连接旧版Mycat(可能基于较早版本的MySQL)时,会因找不到这个变量而抛出错误。 首先,我们需要理解...
- **扩展性:**Memcached易于通过增加服务器数量实现扩展,而MySQL Query Cache在多核CPU环境下可能会遇到扩展瓶颈。 - **维护成本:**MySQL Query Cache在小型网站中可能较为便利,但在大型网站中其弊端更为明显。 ...
MySQL的Query Cache是一种用于优化数据库性能的机制,它主要针对`SELECT`查询,旨在减少对磁盘I/O的依赖,通过缓存查询结果来提高数据检索速度。在MySQL中,Query Cache的工作原理基于SQL语句的精确匹配。当一个`...
在实际开发中,可以根据具体需求权衡使用MySQL的query cache和Memcached,或者结合两者以获得最佳的缓存策略。 为了深入学习Java和Memcached相关的知识,可以参考提供的链接获取更多资料,例如视频教程等,以提高...
- **多核CPU扩展性**:MySQL的query cache在多核CPU上会遇到性能瓶颈,因为存在全局锁,而Memcached不会。 - **缓存数据类型**:query cache仅能存储SQL查询结果,而Memcached可以用来构建各种复杂的缓存。 - **内存...
- **MySQL Query Cache**:监控MySQL查询缓存的状态。 - **MySQL Query Cache Memory**:监控查询缓存的内存使用情况。 - **MySQL Query Response Time (Microseconds)**:显示查询响应时间(微秒)。 - **MySQL ...
- 缓存机制,如`MEMORY`存储引擎和MySQL Query Cache。 7. **复制与集群**: - 主从复制的工作原理,包括异步和半同步复制。 - 多源复制和Group Replication。 - 高可用性和故障切换策略。 8. **安全性**: -...
MSQL 问题集合,线上环境到底要不要开启 query cache MSQL 问题集合中关于 Query Cache(查询缓存)的讨论非常重要。在线上环境中,到底要不要开启 query cache 是一个需要仔细考虑的问题。 Query Cache 的优点是...
Memcached和MySQL的Query Cache是两种常见的缓存解决方案,各有特点: 1. **MySQL Query Cache**: - **优点**:自动缓存SQL查询结果,减少数据库的查询次数,提高性能。 - **缺点**:随着数据的变化,Query ...
MySQL Query Cache - **Query Cache作用**:用于缓存查询结果,提高查询性能。 - **使用限制**:存在一定的限制条件,如不适用于所有查询类型。 #### 14. SELECT INTO OUTFILE 和 LOAD DATA INFILE 用法 - **...
4. 缓存机制:使用MySQL Query Cache缓存查询结果,提升响应速度。 综上所述,MySQL的学习涵盖了数据库设计、SQL语法、索引、视图、存储过程、事务处理等多个方面。通过深入学习和实践,你可以掌握MySQL的基本操作...
mysql Query Cache 默认为打开。从某种程度可以提高查询的效果,但是未必是最优的解决方案,如果有的大量的修改和查询时,由于修改造成的cache失效,会给服务器造成很大的开销,可以通过query_cache_type【0(OFF)1...
Table of Contents Preface, Notes, Licenses . . . . . . . . ....1. Licenses for Third-Party Components ....1.1. FindGTest.cmake License ....1.2. LPeg Library License ....1.3. LuaFileSystem Library License ....
MySQL是一个流行的开源关系型数据库管理系统(RDBMS),广泛用于Web应用程序的后端数据存储。它基于结构化查询语言(SQL)来管理数据,并且是LAMP(Linux, Apache, MySQL, PHP/Python/Perl)技术栈的一部分,这个...