MySQL数据库缓存

       近期公司性能测试时,发现通讯录获取效率较低,主要原因还是数据未进行分页而且数据量过大导致,但是作为一种优化方案,还是提出了开启MySQL查询缓存的方案:

1.  在my.cnf中添加如下配置并重启,开启MySQL缓存

query_cache_size=256M
query_cache_limit=10M
query_cache_type=1
  •  query_cache_size为总缓存大小,官方推荐不要超过256M
  •  query_cache_limit为单条查询结果的最大缓存大小,如不设置,默认为1M
  •  query_cache_type表示缓存方式,0表示不开启缓存,1表示每条语句都开启缓存(除非指定不需要缓存),2表示如果查询语句中指定使用缓存,则进行缓存,具体见后续说明。

2.  开启完毕后,进入MySQL命令行,输入如下命令确认各参数是否设置正确:

show variables like '%query_cache%';

3.  可用如下命令确认缓存状态:

show status like 'Qcache%';

4.  重置缓存内容:

reset query cache;

除了上述简单开启外,额外说明如下:

  1. 开启缓存后,MySQL会根据查询语句与关联表进行查询结果的缓存,一旦关联表发生变化,就会使缓存内容失效;
  2. 虽然没有试验,但据说开启缓存应该是对相关表的插入更新效率是有一定影响的;
  3. 如前所述,query_cache_type=2时,只缓存明确需要缓存的SQL查询(在SELECT后加上SQL_CACHE),这样可以避免滥用缓存, 根据实际需要进行优化;当query_cache_type=1时,也可以通过SQL_NO_CACHE来关闭查询缓存。具体方式如下:
SELECT SQL_CACHE ... FROM ... WHERE ...
SELECT SQL_NO_CACHE ... FROM ... WHERE ...

       总的说来,在部分变化频率较低的表对应的查询语句中,开启Query Cache,对性能会有一定提升,其余情况下,个人感觉还是尽量少用,遇到问题再优化。

你可能感兴趣的:(MySQL)