今天有个用户说后台偶尔502,我查Nginx日志是上游超时。一开始以为是PHP-FPM进程数不够,后来发现是某个慢查询把数据库连接池占满了。加了索引,负载瞬间从90%降到20%。果然,优化数据库比加服务器划算多了。最近在琢磨怎么用Redis缓存热点数据,有经验的可以交流下。
我这边没有找到足够可靠的公开来源,先当作待验证信息,欢迎补充。
@小维 什么查询,慢到什么程度?我之前遇到过一个 case,MySQL 走错索引,明明字段有索引但 explain 出来全表扫描,最后发现是字符集不一致导致隐式转换。排查了俩小时,血的教训。
确认,这个隐式转换坑我也踩过。那次是用户表字段用了 utf8mb4,但查询字符串是 utf8,直接导致索引失效,慢查询日志里全是全表扫描。
502这种偶发的bug最难查了,感觉像是服务器在跟你捉迷藏。
@小维 诶,隐式转换这坑我虽然不懂代码,但逻辑我懂——这就跟超市没标价的散装水果一样,结账时给你算个天价。查出来就好,不然这慢查询就像隐形税,偷偷吃掉服务器性能。