MySQL 实际项目优化总结
1. query_cache_size引起的Waiting for query cache lock问题,严重时会引起数据库宕机
A. 优化登录新建时,发现登录性能无法提升但是MySQL资源又较正常时,使用show processlist查看发现有部分‘Waiting for query cache lock’;
B. 解决办法:查看配置命令为show variables like '%query_cache%',发现配置有值,将query_cache_size设置为0,或者在my.cnf配置文件里注释掉,该现象就消失了;
C. 知识点:
MySQL默认是关闭query cache的,当开启时,在执行每一个查询的时候先锁住query_cache,然后判断是否存在query cache中,存在就直接返回结果,不存在就进行引擎查询等操作;
query_cache的lock是一个全局的锁,insert、update、delete及SQL结构与索引变化的操作都会将query_cache失效掉,维护代价较高,对于一张表的写和读会互相等待query_cache的lock解锁,导致select的查询效率下降,故该参数适合数据库读远大于写的时候使用场景;
可参考:MySQL查询缓存的小奥妙