MySQL缓存合理性,优化

MySQL缓存合理性,优化_第1张图片MySQL缓存合理性,优化_第2张图片

通过调节以下几个参数可以知道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参数大小进行优化。

MySQL缓存合理性,优化_第3张图片

缓存机制

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

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

show global status like 'open%_tables';

MySQL缓存合理性,优化_第4张图片

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

 

 

你可能感兴趣的:(MySQL缓存合理性,优化)