正常情况下,CPU使用率的增长,一般是由于SQL语句不合理,产生了慢查询,同时活跃线程堆积导致CPU使用率过高。但是一定要区分清楚,是由于慢查询导致的CPU使用率高,还是由于其他资源打满查询变慢导致的CPU使用率高。
如果慢查询中有数据,就需要对慢查询进行分析。如果在慢日志明细页签中,扫描行远远大于返回行数,则说明是慢查询导致的CPU使用率过高。
查询业务的读写数据量都非常小,如果某个查询的扫描数据量非常大,那么大概率是由于索引缺失导致。例如下述查询语句在慢查询列表中显示扫描数据量为1万+,但返回数据为1条,那么很明显在name列上有索引缺失的情况。
如果发现name列有索引,但没有被使用,有可能是出现了统计信息不准确导致生成了错误的执行计划。可以通过下述语句重新生成表上的统计信息用以纠正错误计划。
ANALYZE TABLE table1;