`
jedy
  • 浏览: 143734 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

query cache的存储方式

阅读更多
当查询进行时,如果设置了query cache,MySQL会把查询的结果保存在qc中。保存并不是在结果集完全得到的时候进行的,而是一边检索一边保存,MySQL每次会分配一块大小为query_cache_min_res_unit的内存用于保存结果集,当使用完之后再分配一块,所以如果结果集大于query_cache_min_res_unit会使得在一次查询中进行多次内存的分配。

当最后一块分配的内存没有完全使用时,MySQL会把这块内存截断,并把没有使用的那部分归还以重复利用。但是当多个query同时进行时,可能归还的部分无法和空余的内存合成连续的块而造成这部分大小小于query_cache_min_res_unit无法再分配,这样出现了无法再使用的内存碎片。一个连续的同一类型的内存块称为block,包含使用的块,也包含未使用的块。

Qcache_total_blocks 显示了所有的块数,而Qcache_free_blocks 反映了未使用的块数。如果Qcache_free_blocks很大,说明内存的碎片很多,内存的使用率会比较差,所以这时虽然Qcache_free_memory显示还有剩余的内存,也可能无法使用,当插入新的query时就需要清除旧的,使得Qcache_lowmem_prunes很高。可以使用flush query cache重整内存,操作之后Qcache_free_blocks应该为1,因为所有未使用的内存都放在一起作为连续的一块了。可以根据
query的大小调整query_cache_min_res_unit以更好地利用内存。可以使用
<verbatim>
(query_cache_size - Qcache_free_memory)/ Qcache_queries_in_cache
</verbatim>
计算query的平均大小。不过不是把query_cache_min_res_unit设得越小越好,因为频繁的分配内存会影响执行的速度。

我不知道一个query会使用几个block,对于一个刚使用qc,发现每加入一个query,block增加了2,但在一个运行的服务器上看到Qcache_queries_in_cache*2和Qcache_total_blocks要相差不少。
分享到:
评论

相关推荐

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

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

    Hibernate_二级缓存总结

    还有一个类型的 CACHE 就是 QueryCache . 它的作用就是缓存一个 Query 以及 Query 返回对象的 Identifier 以及对象的类型 . 有了 QueryCache 后就可以高效的使用 SECOND LEVEL CACHE. hibernate 查询缓存 ...

    Apache Cassandra存储系统.rar

    一般MySQL使用Query Cache。NoSQL的Cache是记录级的,是一种细粒度的Cache,所以NoSQL在这个层面上来说性能就要高很多。 灵活的数据模型:NoSQL无须事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在...

    grails-redis-hibernate-cache:Grails 与 Redis 的集成作为 Hibernate 二级缓存的后端

    Grails Redis Hibernate 二级缓存 这个插件简化了 Grails Hibernate 2nd Level 缓存和 Redis 之间的集成。 安装 要安装,您需要将插件添加到 BuildConfig.groovy 中 compile " :redis-hibernate-cache... use_query_cac

    MySQL全局共享内存介绍

    全局共享内存则主要是 MySQL Instance(mysqld进程)以及底层存储引擎用来暂存各种全局运算及可共享的暂存信息,如存储查询缓存的 Query Cache,缓存连接线程的 Thread Cache,缓存表文件句柄信息的 Table Cache,...

    mysql 设置查询缓存

    可将如下语句 query_cache_size = 268435456 query_cache_type = 1 query_cache_limit = 1048576 存放到/etc/my.cnf文件的[mysqld]下 然后重启mysql数据库 service mysqld restart 就会启动mysql的缓存机制Query ...

    MySQL DBA教程:Mysql性能优化之缓存参数优化

    数据库属于 IO 密集型的应用程序,其主要职责...一、query_cache_size/query_cache_type (global) Query cache 作用于整个 MySQL Instance,主要用来缓存 MySQL 中的 ResultSet,也就是一条SQL语句执行的结果集,所以

    mysql数据库优化总结(心得)

    1. 优化你的MySQL查询缓存在MySQL服务器上进行查询,可以... 代码如下: // query cache does NOT work$r = mysql_query(“SELECT username FROM user WHERE signup_date &gt;= CURDATE()”); // query cache works! $

    MySQL5.1性能调优与架构设计.mobi

    如MySQL Schema设计的技巧,Query语句的性能优化方式方法及MySQL Server中SQL层和存储引擎层的优化思路。同时还分析了MySQL数据库中主要存储引擎的锁定机制 ●架构设计篇则主要以设计一个高可用可扩展的分布式企业级...

    MySQL性能调优与架构设计.pdf

    如 MySQL Schema 设计的技巧,Query 语句的性能优化方式方法及MySQL Server中SQL层和存储引擎层的优化思路。同时还分析了 MySQL 数据库中主要存储引擎的锁定机制。架构设计篇则主要以设计一个高可用可扩展的分布式...

    MySQL性能调优与架构设计

    如 MySQL Schema 设计的技巧,Query 语句的性能优化方式方法及MySQL Server中SQL层和存储引擎层的优化思路。同时还分析了 MySQL 数据库中主要存储引擎的锁定机制。架构设计篇则主要以设计一个高可用可扩展的分布式...

    Leaps PHP Framework V0.0.2

    一个配置即可切换生成的url是SEO或PATH_INFO或普通的Query String方式。 超简单扩展第三发类 错误异常处理,显示全部错误,包括E_STRICT关闭debug后,代码高兼容性。 高效url路由,url生成,伪静态等 错误异常日志...

    Leaps PHP Framework V0.0.2.zip

    一个配置即可切换生成的url是SEO或PATH_INFO或普通的Query String方式。 超简单扩展第三发类 错误异常处理,显示全部错误,包括E_STRICT关闭debug后,代码高兼容性。 高效url路由,url生成,伪静态等 错误...

    Leaps PHP Framework V0.0.2.rar

    一个配置即可切换生成的url是SEO或PATH_INFO或普通的Query String方式。 超简单扩展第三发类 错误异常处理,显示全部错误,包括E_STRICT关闭debug后,代码高兼容性。 高效url路由,url生成,伪静态等 错误异常日志...

    MySQL性能调优与架构设计.mobi

    如 MySQL Schema 设计的技巧,Query 语句的性能优化方式方法及MySQL Server中SQL层和存储引擎层的优化思路。同时还分析了 MySQL 数据库中主要存储引擎的锁定机制。架构设计篇则主要以设计一个高可用可扩展的分布式...

    MySQL性能调优与架构设计(PDF)

    如 MySQL Schema 设计的技巧,Query 语句的性能优化方式方法及MySQL Server中SQL层和存储引擎层的优化思路。同时还分析了 MySQL 数据库中主要存储引擎的锁定机制。架构设计篇则主要以设计一个高可用可扩展的分布式...

    redis-cache-support

    rediscachesupport ...二 使用方式 以例子来说明 @RedisCacheAble(value="xxoo",names = "name,age" ) public Person testAble(String key) { // exec sql query } 1 首先在redis中根据key=xxxoo:key查询

Global site tag (gtag.js) - Google Analytics