MySQL性能调优(一)架构优化--查询缓存优化

非活跃数据多的情况下首先考虑开启缓存

1、开启查询缓存

根据MySQLServer的架构图可以看出,当执行一条sql语句的时候,命令分发器会先去查询缓存模块中查取缓存,如果有缓存值,则直接返回缓存值,如果不存在缓存值,再向下查询。


MySQLServer架构图

1.1 查看是否开启

所以首先开启缓存是优化的第一件事情(默认关闭),使用下面命令查看缓存是否开启

show variables like '%query_cache%'; 

查询结果如下:


查询缓存是否开启

说明:
have_query_cache:是否支持Query Cache
query_cache_limit:Query Cache 存放的单条Query 最大Result Set ,默认1M
query_cache_min_res_unit:Query Cache 每个Result Set 存放的最小内存大小,默认4k
query_cache_size:存放Query Cache 内存的大小
query_cache_type:是否开启Query Cache
query_cache_wlock_invalidate:当有写锁时,Query Cache是否还有效

1.2 开启

开启查询缓存的操作:
(windows系统)
打开my.ini文件,修改
query_cache_type=1
query_cache_size=20M
然后重启mysql服务器(MySQL在windows下启动关闭
(linux系统)
执行

vi /etc/my.cnf

增加配置
query_cache_size = 20M
query_cache_type = ON
然后重启mysql服务器
重启命令

service mysql restart

再次查看确认开启

确认开启

1.3查看缓存的使用情况

使用命令

 show status like 'qcache%';

返回使用情况


缓存使用情况

Qcache_free_blocks:缓存中相邻内存块的个数,如果数量大说明可能有碎片
Qcache_free_memory:空闲内存
Qcache_hits:缓存命中次数
Qcache_inserts:查询的次数,相同的查询语句不增加此项个数
Qcache_lowmem_prunes:由于内存的问题,没有进入cache的查询次数,如果数量很大,需要考虑增加缓存大小和清理部分缓存
Qcache_not_cached:没被缓存的查询次数,如果查询语句不想进入缓存,可以使用此命令

select SQL_NO_CACHE * from users;

Qcache_queries_in_cache:从缓存中返回数据的查询的次数
Qcache_total_blocks:当前缓存中内存块的总数

1.4缓存清理

缓存中的碎片整理

flush query cache;

清除缓存

reset query cache;

参考资料:
《MySQL性能调优与架构设计》
https://blog.csdn.net/chen_xiaoqi/article/details/103934789

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容