mysql没索引会点cpu吗_mysql 没有索引导致的cpu过高

今天运维突然来找我,说有一台机器上有个mysql进行占用cpu特别厉害,让我看看怎么回事。

我连上这台机器看了下,发现确实如他所说的,有个mysql进程占用cpu达到300%,而且长期居高不下。

很奇怪,这台机器上主要是承担主站的cms访问,一般说来负载都是很低的。

出现这种现象我觉得最有可能是三方面的问题:

1.访问量暴涨,这个是最让人开心的

2.应用故障,比如前端缓存失效,应用频繁重启

3.服务器上发生了io操作,比如拷贝或者传送文件等

当然,除了这些,还有个问题,数据库故障,这个我最不愿意看到,弄不好要停站的。

ok,锁定故障范围,那就一一排查。

1.先看了运维系统的流量图,发现访问量没有明显增长

2.连上前端的机器查看日志,没有发现重启和异常

3.在mysql服务器上top,没有发现其他明显的io操作,wa很低,另外,vmstat 里来看,io读写并不高,反倒是us和sy要高一些。

这样看起来,应该前端应该没事,服务器上也能排除有人违规操作。

那么估计只能是数据库有问题了。

这里有个疑点:

如果数据库上进行了繁重的操作,那么wa通常会比较高,而不是us。

从iostat上来看,机器的读写都很低,那么us的升高可能是mysql在sql解析、索引或者排序等行为引起的,这有可能是有大型sql在执行,像join,select all这些东西。

打开mysql客户端,先看了下processlist,结果发现偶尔才有一两条sql执行,很反常。

退出来看看tcpflow,发现确实没什么请求过来。

这么闲的服务居然会占这么高的cpu?看起来好像是sql有问题。

如果sql有问题的话,那么这种sql一定是很慢的,slow query log里应该有显示吧?

打开log看了一下,发现里面什么都没有。。。

感觉不对劲,又连上mysql,show variables like ‘%quer%’

log_queries_not_using_indexes=OFF

log_slow_queries=OFF

发现这两项都被人关了。。。

set global log_queries_not_using_indexes=on;

set global log_slow_queries=on;

log出来了。

对log分析了一下,结果发现很多sql都是这种状态

# Query_time: 0.002530  Lock_time: 0.000077 Rows_sent: 1  Rows_examined: 54

这说明不是慢查询,应该是没有索引的问题。

进了一个数据库,检查了一下表,问题找到了,所有表居然都没加索引!

我想吐血阿。。。

看了看表不怎么大,于是就把索引补上了,服务器负载立即就下来了。。。

晕到死,总是有这种问题,真不知道以前的开发人员在搞什么,责任心,责任心阿,亲。。。。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值