起初发现机器的mysql进程占用cpu很高,开始以为是正常的,就没太关心。闲着没事,就具体查了下原因。
之所以mysql这么占用cpu,99%和sql语句相关,所有使用show full processlist查询了相关的sql语句,发现几乎都是同一个查询有问题。
贴出来使用explain一看,我去,扫描100万左右的数据,明显sql语句有问题。
sql=select * from table where src= 'xxx' and tid = 123
看了看表的索引,发现索引使用有问题。应该使用src_tid的索引,结果用上另一个src_xxx_xxx的索引.但是这sql不会有问题啊。再看了看字段的数据类型。tid是varchar,查询使用的是int。我擦,这。。。
查询的int改成string解决。
要是使用的索引的确是src_tid,传入tid的是int,这问题就真的很难发现了。我靠。。。
本文详细解析了一个由于SQL语句不当导致的mysql进程CPU占用过高的问题。通过分析发现,问题根源在于tid字段类型不匹配,使用了错误的索引。调整查询字段类型后,问题得以解决。
270

被折叠的 条评论
为什么被折叠?



