记一次正式环境MySQL CPU飙升100%事故解决过程

文章讲述了服务上线后遇到的卡顿问题,通过排查发现是由于几个大表视图的长时间select查询导致的CPU占用。作者建议优化查询结构,限制最大查询时间以减少资源消耗。
摘要由CSDN通过智能技术生成

问题

最近上线的服务,业主反应经常系统用着用着就特别卡顿,整个页面都出不来。

最开始以为是Java OOM,因为查看日志,各种方法执行的的确是慢。

但奇怪的是Java也上了-XX:+HeapDumpOnOutOfMemoryError 堆转储参数,也并没有打印dump日志。

因为正式环境临时提供的服务器,Java和MySQL部署在同一台机器上,打开任务管理器一看,好家伙,MySQL进程直接干满了!

在这里插入图片描述

排查

找出是哪些语句占用了大量CPU

show full processlist

请添加图片描述

果然,有几个Time列是 8000多的,Command是Query的,Statesending data的语句(我这里是把8000多的那几条给kill掉了)

也就说明了这几个语句:正在处理select查询,并且一边处理数据一边在发送客户端的路上,用了8000多秒。

再看查询的表,大表视图,百万级别表级联,找到罪魁祸首了。

show processlist 的首列id就是线程id,找到原因记得先kill掉,别影响使用。

解决

一般这种视图就是废了,8000多秒都查不出来,基本没啥存在意义,没什么好的办法,就是维护一张单表,数据变动的时候异构进这张单表。

避免这种长时间查询,带来的CPU占用,配置了mysql参数

设置一个最大查询时间,超过了最大语句执行时间,查询执行就会被中断

max_execution_time

请添加图片描述

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值