`

Query Cache

阅读更多

当你的数据库打开了Query Cache(简称QC)功能后,数据库在执行SELECT语句时,会将其结果放到QC中,当下一次处理同样的SELECT请求时,数据库就会从QC取得结 果,而不需要去数据表中查询。

在这个“Cache为王”的时代,我们总是通过不同的方式去缓存我们的结果从而提高响应效率,但一个缓存机制是否有效,效果如何,却是一个需要好好 思考的问题。在MySQL中的Query Cache就是一个适用较少情况的缓存机制。在上图中,如果缓存命中率非常高的话,有测试表明在极端情况下可以提高效率238%[1]。 但实际情况如何?Query Cache有如下规则,如果数据表被更改,那么和这个数据表相关的全部Cache全部都会无效,并删除之。这里“数据表更改”包括: INSERTUPDATEDELETETRUNCATEALTER TABLE,DROP TABLE, or DROP DATABASE等。举 个例子,如果数据表posts访问频繁,那么意味着它的很多数据会被QC缓存起来,但是每一次posts数据表的更新,无论更新是不是影响到了cache 的数据,都会将全部和posts表相关的cache清除。如果你的数据表更新频繁的话,那么Query Cache将会成为系统的负担。有实验表明,糟糕时,QC会降低系统13%[1]的处理能力。

如果你的应用对数据库的更新很少,那么QC将会作用显著。比较典型的如博客系统,一般博客更新相对较慢,数据表相对稳定不变,这时候QC的作用会比 较明显。

再如,一个更新频繁的BBS系统。下面是一个实际运行的论坛数据库的状态参数:

QCache_hit 5280438
QCache_insert 8008948
Qcache_not_cache 95372
Com select 8104159

可以看到,数据库一共往QC中写入了约800W次缓存,但是实际命中的只有约500W次。也就是说,每一个缓存的使用率约为0.66次。很难说,该 缓存的作用是否大于QC系统所带来的开销。但是有一点是很肯定的,QC缓存的作用是很微小的,如果应用层能够实现缓存,将可以忽略QC的效果。

————-下面是关于QC的一些其他细节—————–

一、Query Cache相关参数:

  • query_cache_size QC占用空间大小,通过将其设置为0关闭QC功能
  • query_cache_type 0表示关闭QC;1表示正常缓存;2表示SQL_CACHE才缓存
  • query_cache_limit 最大缓存结果集
  • query_cache_min_res_unit 手册上说,QC会按照这个值分配缓存block的大小。
  • Qcache_lowmem_prunes 这是一个状态变量(show status),当缓存空间不够需要释放旧的缓存时,该值会自增。

二、Query Cache观察:

CREATE TABLE t1(id INT,var1 varchar(10));
//Com_select:8 Qcache_hits:1
INSERT INTO t1 VALUES(1,’WWW’);
//Com_select:8 Qcache_hits:1
SELECT * FROM t1 WHERE id=1;
//Com_select:9 Qcache_hits:1
SELECT * FROM t1 WHERE id=1;
//Com_select:9 Qcache_hits:2 Qcache_queries_in_cache:1
INSERT INTO t1 VALUES(2,’RRRR’);
//Com_select:9 Qcache_hits:2 Qcache_queries_in_cache:0
SELECT * FROM t1 WHERE id=1; //INSERT后Cache失效
//Com_select:10 Qcache_hits:2 Qcache_queries_in_cache:1

 

参考:

  1. http://dev.mysql.com/doc/refman/5.0/en/query-cache.html
  2. http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html
  3. http://www.mysqlperformanceblog.com/2006/07/27/mysql-query-cache/
分享到:
评论

相关推荐

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

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

    MySQL的Query Cache原理分析

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

    解决Hibernate SQL Query Cache的一个可靠性问题(附源码)

    源码 博文链接:https://raymondhekk.iteye.com/blog/250427

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

    本文将重点讨论"Mycat处理连接数据库8.0以上程序报错query_cache_size"的问题,以及如何通过Mycat的更新来解决这个问题。 Mycat是一款分布式数据库中间件,它允许应用程序以透明的方式连接到多台数据库服务器,实现...

    querycache:Querycache 是一种智能分布式缓存,用于存储来自异构存储系统的 SQL 结果

    Querycache (TM) 是一种智能分布式缓存,用于存储来自异构存储系统的 SQL 结果。 用户组: : user 路线图: ://docs.google....

    Laravel开发-laravel-query-cache

    在Laravel框架中,查询缓存(laravel-query-cache)是一种优化数据库性能的策略,它允许开发者存储查询结果,避免多次执行相同的SQL语句。这不仅提高了应用的响应速度,也减轻了数据库服务器的压力。本篇文章将深入...

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

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

    对于mysql的query_cache认识的误区

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

    MySQL查询加速器:利用Query Cache提升效率

    MySQL是一个流行的开源关系型数据库管理系统(RDBMS),广泛用于Web应用程序的后端数据存储。... MySQL的特点包括: - **开放源代码**:MySQL的源代码是公开的,任何人都可以自由使用和修改。 - **跨平台**:MySQL可以...

    Laravel开发-laravel-query-cache .zip

    在Laravel框架中,Query Cache是一种优化数据库查询性能的机制,它允许开发者缓存查询结果,从而避免重复执行相同的数据库查询。本项目"laravel-query-cache"可能包含了一个实现或扩展了这一功能的代码库,旨在帮助...

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

    标题中的问题涉及到的是在使用Mycat数据中间件时,尝试使用JDBC 8驱动连接到Mycat 1.6版本时遇到的一个错误:`Unknown system variable 'query_cache_size'`。这个问题出现的原因在于MySQL 8.0版本中移除了`query_...

    Laravel开发-query-cache-builder

    在Laravel框架中,Query Cache Builder是一个非常实用的工具,它允许开发者将数据库查询结果缓存起来,以提高应用程序的性能。"Laravel开发-query-cache-builder"这个项目就是专门针对这个功能进行增强和优化,旨在...

    MySQL取消了Query Cache的原因

    MySQL之前有一个查询缓存Query Cache,从8.0开始,不再使用这个查询缓存,那么放弃它的原因是什么呢?在这一篇里将为您介绍。 MySQL查询缓存是查询结果缓存。它将以SEL开头的查询与哈希表进行比较,如果匹配,则返回...

    mysql题库完整版

    - **解释:** 在高并发环境下,尽管Query Cache的命中率很高,但由于请求的数量增加,导致更多的查询需要被缓存或替换现有的缓存项。这会增加Query Cache的管理开销,从而影响性能。因此,随着并发用户的增加,Query...

    mysql参数及其优化

    query_cache_size、query_cache_type、innodb_buffer_pool_size、innodb_log_file_size、innodb_log_buffer_size、innodb_flush_logs_at_trx_commit、transaction_isolation、innodb_file_per_table、innodb_open_...

    memcached面试专题及答案.pdf

    MySQL 的 query cache 是集中式的,连接到该 query cache 的 MySQL 服务器都会受益。而 Memcached 则是一个分布式的缓存系统,可以水平扩展以满足大规模系统的需求。 Memcached 相比 MySQL 的 query cache,有以下...

    mysql常用配置参数和状态变量

    7. Query_cache_limit:Query Cache 存放的单条 Query 最大 Result set(结果集),默认 1MB。 8. Qcache_free_memory:Query Cache 中目前剩余的内存大小。通过这个参数可以较为准确的观察出当前系统中的 Query ...

Global site tag (gtag.js) - Google Analytics