mysql关于cpu占用100%问题的思考


  CPU高说明计算机在执行大量的计算,很大可能是查询执行时因索引建立不合理或sql语句书写效率低下,mysql发生了大量的连接查询、条件判断等,需要处理的记录数过大。

  此时,可以通过建立合理的索引或者改写sql语句达到降低CPU的目的。

  今天遇到的例子:1)要查询的日志表读写比较频繁,优化时,先对该表进行统计形成小时表和日表,然后根据业务来看,6个月内的数据并不要求很准确,故查询日表,避免了查询更新较为频繁的日志表,使用了更新较少,且数据量较少的日表。2)查询关联了用户角色表,筛选出去了角色是教师的用户,去统计学生的数据,因为教师数量相比学生数量很少,故优化时删除了这个关于用户角色的关联查询,减轻了连表查询的代价。数据虽有不是特别准确,但是基本满足条件。

  思考:关于用户角色筛选的问题,按理可以在日志表加上用户的角色标识作为冗余字段,查询时仅需要通过该字段判断角色即可,无需再关联用户角色表。

 

 

show full PROCESSLIST ;

SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;

SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;

 

根据这一时刻发生的sql语句,手动停止一部分,再停止另一部分的方式,判断出是哪句 sql 有问题,然后根据具体业务对其进行优化。

 

慢 sql 也要监测。

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/275211.html

(0)
上一篇 2022年7月18日
下一篇 2022年7月18日

相关推荐

发表回复

登录后才能评论