频繁全表扫描导致cpu使用率飙升故障处理

一:问题描述

今天早晨收到邮件告警,提示有台数据库服务器的cpu使用率在50%-70%间波动,有几个瞬间达到了90多。

通过巡检数据库,发现有两处异常:

① 故障期间的慢查询日志其中90%的慢查询来自于同一个sql:

在半个小时内执行了2779次该sql。虽然sql单条执行不算很慢,只有2秒。但是执行次数太过频繁。

查看执行计划,发现走了全表扫描,该表数据量有200万。

相当于平均每秒要扫描一次两百万条数据的表。

 

② 执行以下语句能看到有几十条执行时间在1秒的查询。平时这些查询都执行得很快,执行该sql是看不到这些语句的。说明数据库负载有些高了。

SELECT * FROM information_schema. `PROCESSLIST`

WHERE info IS NOT NULL

ORDER BY TIME DESC;

 

二:出错原因

频繁执行一个全表扫描的慢查询导致cpu使用率上升。

 

三:解决办法

创建索引优化

CREATE INDEX ind_user_create_tm ON us_user_eject(user_id,create_tm);

 

四:总结

不能对单条执行不算很慢的慢查询掉以轻心,当执行次数很高了也容易引发故障。

之前也遇到过一次同样的问题。上次是因为使用了sysdate()没有走索引,后来将sysdate()改成now()好了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值