`
eyesmore
  • 浏览: 376246 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mysql query cache

阅读更多


query_cache 读者摘要:

http://blog.csdn.net/qiuyepiaoling/article/details/6004611 

1、query_cache是server的查询缓存,跟存储引擎无关。当然存储引擎层也有查询缓存。
2、query_cache缓存的VALUE是“结果集”,而不是“页”。KEY是SQL语句,取HASH,如果SQL中含有子查询,也是作为整体Cache,而不会按子查询分别Cache。
3、内存与磁盘的读写速度差异是千倍级。直观的说:宁愿在内存中执行1000次,不要在磁盘上执行一次。
4、query_cache提高查询效率的2个原因:(1)内存读写性能比磁盘好;(2)缓存命中时,减少了SQL解析和优化时间。
5、失效机制: 一个表的任何修改,都会促使涉及这个表的所有query cache失效。 这个机制不合理,因为不是所有的表更新都会改变SQL的结果集。但是这个机制实现简单。
6、query_cache的配置和统计:
(1)设置: SHOW VARIABLES LIKE '%query_cache%';
(2)统计:  show status like 'Qcache%' ;
(3)内存管理:query_cache的内存管理也是按块分配,不是按需分配,因此当需要1.8块的时候,要占2块,导致出现内部碎片(mysql的flush query cache是碎片整理工具,碎片整理期间,所有的Cache都会被锁住禁用)。query_cache也是指定总池子大小,如果池子满了,则会进行“驱逐”。

7、即使query_cache开关打开了,也有不执行cache的情况发生:
(1)SQL包含不确定函数,比如current_date 或 rand(随机数)等。
(2)结果集太大,超过了query_cache_limit的大小,默认数值是1M。
(3)query_cache总内存空间不够,新的会被缓存,老的会被驱逐。
(4)在SQL语句上明确用SQL_NO_CACHE指定不缓存。

8、运维关键

SHOW VARIABLES LIKE '%query_cache%';

query_cache_limit:允许 Cache 的单条 Query 结果集的最大容量,默认是1MB,超过此参数设置的 Query 结果集将不会被 Cache
“值大小限制”: Value大小限制,结果集默认不能超过1M,超过1M的不给于缓存。跟Memcached类似。

query_cache_min_res_unit:设置 Query Cache 中每次分配内存的最小空间大小,也就是每个 Query 的 Cache 最小占用的内存空间大小,默认4KB,要设置合理,不然会造成碎片过多,造成内存的浪费。
“块大小”:默认4K。不是4K的整数倍的内存需求,需要向上取整分配,因此产生内部碎片。

query_cache_size:设置 Query Cache 所使用的内存大小,默认值为0,大小必须是1024的整数倍,如果不是整数倍,MySQL 会自动调整降低最小量以达到1024的倍数
“总大小”:query_cache的总大小,因为mysql是自己管理内存的,query_cache_size是mysql从操作系统批发来的总内存大小。query_cache在这个范围内分配,如果超过这个范围,就开始驱逐。

query_cache_type:控制 Query Cache 功能的开关,可以设置为0(OFF),1(ON)和2(DEMAND)三种,意义分别如下:
“缓存开关”:关闭,打开(默认全缓存+指定不缓存,默认全不缓存+指定缓存)。

0(OFF):关闭 Query Cache 功能,任何情况下都不会使用 Query Cache

1(ON):开启 Query Cache 功能,但是当 SELECT 语句中使用的 SQL_NO_CACHE 提示后,将不使用Query Cache

2(DEMAND):开启 Query Cache 功能,但是只有当 SELECT 语句中使用了 SQL_CACHE 提示后,才使用 Query Cache

query_cache_wlock_invalidate:控制当有写锁定发生在表上的时刻是否先失效该表相关的 Query Cache,如果设置为 1(TRUE),则在写锁定的同时将失效该表相关的所有Query Cache,如果设置为0(FALSE)则在锁定时刻仍然允许读取该表相关的 Query Cache。默认false   (这个开关没太理解什么意思)

----

show status like 'Qcache%' ;

 

query_cache_size: “总内存”大小。
Qcache_free_memory:目前还处于空闲状态的 Query Cache 内存总量  (空闲内存大小)
Qcache_free_blocks:目前还处于空闲状态的 Query Cache 中内存 Block 数目  (“空闲块数量”)
Qcache_total_blocks:Query Cache 中总的 Block 数量    (“总块数量”)


Qcache_hits:Query Cache 命中次数
Qcache_inserts:向Query Cache 中插入新的 Query Cache 的次数,也就是没有命中的次数
Qcache_not_cached:没有被 Cache 的 SQL 数,包括无法被 Cache 的 SQL 以及由于 query_cache_type 设置的不会被 Cache 的 SQL
Qcache_queries_in_cache:目前在 Query Cache 中的 SQL 数量   (缓存池中有多少个Query正被缓存着)
Qcache_lowmem_prunes:Query Cache 因为内存不够,而从中删除老的Query Cache的次数。   (驱逐的个数)

当一次query过来,对于缓存,要么命中,则hits;要么没命中,则为了未来命中,需要向缓存中插入inserts。 当然也有第三种情况:既没有命中缓存,又不插入缓存。 这种情况发生在(1)结果集超过1M;(2)SQL中含有不定值函数,比如current_date 。

Query Cache 命中率= Qcache_hits/(Qcache_hits+Qcache_inserts) ; Query Cache 的大小设置一般不要超过256MB。

如果从查询缓存中返回一个查询结果,服务器把Qcache_hits状态变量的值加一,而不是Com_select变量。

分享到:
评论

相关推荐

    MySQL高速缓存启动方法及参数详解(query_cache_size)

    会发现其变量have_query_cache的值是yes,MYSQL初学者很容易以为这个参数为YES就代表开启了查询缓存,实际上是不对的,该参数表示当前版本的MYSQL是否支持Query Cache,实际上是否开启查询缓存是看另外一个参数的值:...

    Mycat处理连接数据库8.0以上程序报错query_cache_size

    然而,当Mycat与MySQL 8.0及以上版本配合使用时,可能会遇到一些兼容性问题,其中“query_cache_size”报错就是典型的例子。 在MySQL 8.0中,查询缓存功能被默认禁用,并且在某些版本中被完全移除。这是由于MySQL...

    对于mysql的query_cache认识的误区

    如果空格是加在query之前,比如是在query的起始处加了空格,这样是丝毫不影响query cache的结果的,mysql认为这是一条query, 而如果空格是在query中,那会影响query cache的结果,mysql会认为是不同的query

    解决mycatJDBC8驱动连接Mycat1.6报错 Unknown system variable 'query_cache_size'

    这个问题出现的原因在于MySQL 8.0版本中移除了`query_cache`相关的系统变量和功能,因此在使用新版本的JDBC驱动去连接旧版Mycat(可能基于较早版本的MySQL)时,会因找不到这个变量而抛出错误。 首先,我们需要理解...

    memcached面试专题.pdf

    - **扩展性:**Memcached易于通过增加服务器数量实现扩展,而MySQL Query Cache在多核CPU环境下可能会遇到扩展瓶颈。 - **维护成本:**MySQL Query Cache在小型网站中可能较为便利,但在大型网站中其弊端更为明显。 ...

    MySQL的Query Cache原理分析

    MySQL的Query Cache是一种用于优化数据库性能的机制,它主要针对`SELECT`查询,旨在减少对磁盘I/O的依赖,通过缓存查询结果来提高数据检索速度。在MySQL中,Query Cache的工作原理基于SQL语句的精确匹配。当一个`...

    JAVA_memcached面试专题.pdf

    在实际开发中,可以根据具体需求权衡使用MySQL的query cache和Memcached,或者结合两者以获得最佳的缓存策略。 为了深入学习Java和Memcached相关的知识,可以参考提供的链接获取更多资料,例如视频教程等,以提高...

    memcached面试专题及答案.pdf

    - **多核CPU扩展性**:MySQL的query cache在多核CPU上会遇到性能瓶颈,因为存在全局锁,而Memcached不会。 - **缓存数据类型**:query cache仅能存储SQL查询结果,而Memcached可以用来构建各种复杂的缓存。 - **内存...

    cacti-mysql-template指标解释.pdf

    - **MySQL Query Cache**:监控MySQL查询缓存的状态。 - **MySQL Query Cache Memory**:监控查询缓存的内存使用情况。 - **MySQL Query Response Time (Microseconds)**:显示查询响应时间(微秒)。 - **MySQL ...

    mysql面试题,常见的mysql面试题

    - 缓存机制,如`MEMORY`存储引擎和MySQL Query Cache。 7. **复制与集群**: - 主从复制的工作原理,包括异步和半同步复制。 - 多源复制和Group Replication。 - 高可用性和故障切换策略。 8. **安全性**: -...

    MSQL问题集合,线上环境到底要不要开启query cache

    MSQL 问题集合,线上环境到底要不要开启 query cache MSQL 问题集合中关于 Query Cache(查询缓存)的讨论非常重要。在线上环境中,到底要不要开启 query cache 是一个需要仔细考虑的问题。 Query Cache 的优点是...

    2021Java字节跳动面试题——面向字节_Memcached.pdf

    Memcached和MySQL的Query Cache是两种常见的缓存解决方案,各有特点: 1. **MySQL Query Cache**: - **优点**:自动缓存SQL查询结果,减少数据库的查询次数,提高性能。 - **缺点**:随着数据的变化,Query ...

    MySQL学习资源总贴

    MySQL Query Cache - **Query Cache作用**:用于缓存查询结果,提高查询性能。 - **使用限制**:存在一定的限制条件,如不适用于所有查询类型。 #### 14. SELECT INTO OUTFILE 和 LOAD DATA INFILE 用法 - **...

    MySQL的学习笔记和一些实例.zip

    4. 缓存机制:使用MySQL Query Cache缓存查询结果,提升响应速度。 综上所述,MySQL的学习涵盖了数据库设计、SQL语法、索引、视图、存储过程、事务处理等多个方面。通过深入学习和实践,你可以掌握MySQL的基本操作...

    mysql select缓存机制使用详解

    mysql Query Cache 默认为打开。从某种程度可以提高查询的效果,但是未必是最优的解决方案,如果有的大量的修改和查询时,由于修改造成的cache失效,会给服务器造成很大的开销,可以通过query_cache_type【0(OFF)1...

    MySQL 5.6 Reference Manual

    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查询加速器:利用Query Cache提升效率

    MySQL是一个流行的开源关系型数据库管理系统(RDBMS),广泛用于Web应用程序的后端数据存储。它基于结构化查询语言(SQL)来管理数据,并且是LAMP(Linux, Apache, MySQL, PHP/Python/Perl)技术栈的一部分,这个...

Global site tag (gtag.js) - Google Analytics