mysql中缓存随处可见,常见的有权限缓存cache,主机缓存名cache,存储程序缓存cache以及innodb全文索引缓存cache等。缓存是个很大的话题,下面只是简单说明。
1.查看主机名缓存的大小,
建议:如果有多台主机与mysql服务器相连,或者DNS较慢,可以适当地增加主机名缓存的大小。
查看每一个会话提供的存储程序缓存的个数上限,
查看全文索引缓存大小
查询缓存Query Cache
查询缓存不仅将查询语句缓存起来,还将查询结果缓存起来。
查询缓存最忌讳修改,因为它会使mysql的查询缓存失效。
have_query_cache:是否支持查询缓存
query_cache_limit:如果某条查询语句的查询结果超过了这个结果集,那么将不会添加到查询缓存。
query_cache_min_res_unit:查询缓存是以块为单位申请内存空间,过大会多出分配,过小会导致内存碎片。
query_cache_size :设置查询缓存的内存大小。
query_cache_type :有三个参数,0表示查询缓存关闭,1表示查询总是先到查询缓存中查找,2表示表示不使用查询缓存,除非在sql中指定sql_cache选项。
query_cache_wlock_invalidate:该参数用于设置行级排它锁与查询缓存之间的关系,0(默认)表示加行级排他锁的同时,该表的所有查询缓存依然有效。如果设置为1,表示加行级排他锁的同时
该表的所有查询缓存将失效。
获取当前实例的查询状态信息,从而可以计算出当前查询缓存的命中率,继而确定query_cache_size的设置是否合理。
Qcache_free_blocks:表示查询缓存中处于空闲状态的内存块数量(碎片的数量),如果此值太大表示碎片过多,缓存的碎片率=Qcache_free_blocks/Qcache_total_blocks *100%
Qcache_free_memory:表示当前实例中还有多少可用缓存。
Qcache_hits :表示使用查询缓存的次数,此值会依次递增,过大考虑增加缓存,过少考虑关闭。
Qcache_inserts :表示查询缓存中,此前总共缓存过多少select语句的结果集。
Qcache_lowmem_prunes :表示因为查询缓存已满而溢出,删除的查询个数,如果太高要增加查询缓存。
Qcache_not_cached :表示没有进入查询缓存的select语句的个数。
Qcache_queries_in_cache:表示查询缓存中缓存着多少条select语句的结果集。
Qcache_total_blocks :查询缓存总块数。
总结:查询命中率=Qcache_hits/(Qcache_hits+Qcache_inserts+Qcache_not_cached),如果查询命中率比较高,说明大部分select语句都命中了查询缓存。
查看结果集缓存:
查看排序缓存,排序缓存分为普通排序缓存,MyISAM排序缓存以及InnoDB排序缓存。
注意:如果想提升排序速度,首先考虑使用索引,其次可以考虑尝试增加sort_buffer_size参数的大小。
InnoDB缓存池(InnoDB)缓存池是InnoDB性能提升的核心,它既可以缓存数据又可以缓存索引。
innodb_buffer_pool_size :缓存池的大小,这个很重要,在允许的范围内越大越好。
innodb_buffer_pool_instances:缓冲池划分的区域默认是1,表示划分为一个区域。可以划分为多个区域,但是建议每个区域不小于1G的空间。
呵呵。。。