出现慢SQL问题时,真的是SQL慢吗?如何分析和处理分析MySQL的慢SQL发生的原因
可能原因:
- 确认是否是SQL本身慢;
- 机器CPU、内存状态、连接池状态不佳等会导致大面积的慢SQL;
- 确认是引擎层的SQL执行耗时慢、Filter过滤代价高等都可能是索引问题;
- 确认是否走了索引;
- 如果走了,再分析
- Server层问题:网络、服务器链接问题;
- 首先要排除索引问题;
- 网络波动、链接数过少,导致链接中断,并发度低,可能引发数据查询慢;
- 缓存失效;
- 排除索引问题;
- 需要根据Buffer Pool的缓存命中率来确认是不是缓存失效的问题;
- 增加Buffer Pool容量;或者是否是某些大型查询导致缓存频繁被挤占、失效?
- QPS过大导致CPU升高、负载升高;
- 需要先排除索引问题;确定是CPU、负载问题;
- 那么只能在业务上加缓存、分库分表、水平扩容、读写分离等手段来解决;
- 深分页的慢SQL:见「MySQL实际业务方案」