MySQL缓存合理性,优化

通过调节以下几个参数可以知道query_cache_size设置得是否合理

Qcache_inserts

Qcache_hits

Qcache_lowmem_prunes

Qcache_free_blocks

如果Qcache_lowmem_prunes 的值非常大,则表明经常出现缓存不够的情况,如果Qcache_hits的值非常大,则表明查询缓存冲使用非常频繁,如果该值较小反而影响效率,那么可以考虑不用查询缓存;

Qcache_free_blocks值非常大,则表明缓存区中的碎片很多,可能需要需找合适的机会进行整理

Qcache_hits表示多少次命中,通过这个参数我们可以查看到 Query Cache的基本效果;

Qcache_inserts表示多少次未命中然后插入,通过Qcache_hits 和 Qcache_inserts 两个参数可以算出 Query Cache的命中率

Query Cache命中率 = Qcache_hits / (Qcache_hits + Qcache_inserts) 

Qcache_lowmem_prunes表示多少条Query 因为内存不足而被清除出Query Cache,通过Qcache_lowmem_prunes和Qcache_free_memory相互结合,能够更清楚地了解到系统中Query Cache的内存大小是否真的足够,是否频繁出现因为内存不足而有Query被换出的情况
 

innoDB的缓存性能

当使用innoDB存储引擎的时候,innodb_buffer_pool_size 参数可能是影响性能的最为关键的一个参数了,用来设置用于缓存innoDB索引及数据块的内存区域大小,更像是Oracle数据库的db_cache_size。简单来说,当操作一个InnoDB表的时候,返回的所有数据或者查询过程中用到的任何一个索引块,都会在这个内存区域中区查询一遍。

和key_buffer_size 对于MyISAM引擎一样,innodb_buffer_pool_size设置了InnoDB存储引擎需求最大的一块内存区域的大小,直接关系到InnoDB存储引擎的性能,所有如果有足够的内存,尽可将该参数设置到足够大,将尽可能多的InnoDB的索引及数据都放入到该缓存区域中,直至全部。

可以通过(innodb_buffer_pool_read_requests - innodb_buffer_pool_reads) / innodb_buffer_pool_read_requests * 100% 计算缓存命中率,并根据命中率来调整innodb_buffer_pool_size参数大小进行优化。

缓存机制

另外,table_cache是一个非常重要的MySQL性能参数,主要用于设置table高速缓存的数量,由于每个用户端链接都会至少访问一个表,因此该参数是与max_connections有关。当某一连接访问一个表时,MySQL会检查当前已缓存表的数量。如果该表已经在缓存中打开,则会直接访问缓存中的表以加快查询速度;

如果该表未被缓存,则会将当前的表添加进缓存并进行查询。在执行缓存操作前,table_cache参数用于限制缓存表的最大数目;如果当前已经缓存的表未大盗table_cache数目,则会将新表添加进去,若已经达到此值,MySQL将根据缓存表的最后查询时间,查询率,等规则释放之前的缓存。

show global status like 'open%_tables';

来查看这两个参数的值。其中Open_tables是当前正在打开表的数量,Opened_tables是所有已经打开表的数量。

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值