mysql 慢查询过多_mysql慢查询导致故障

原因:

网站访问很慢,报警php进程数过大

排查及处理:

1.首先查看服务器监控和mysql监控,分析服务器是否负载过大,受到攻击,以及mysql性能方面是否正常

2.发现只读数据库服务器cpu利用率100%,show processlist,发现有很多慢查询,为先保证业务正常运行,先通过mysqladmin processlist -uusername -ppassword查看到连接的进程(使用哪个用户登录,只能查看到该用户下面运行的线程) ,直接kill掉query花时较长的线程。cpu负载慢慢就降下来了,等恢复稳定,然后再优化慢查询。

操作流程:

mysqladmin full processlist -uusername -ppassword 查看所有连接的线程,分别为:id,user,host,db,command,time,state,info

id表示标识,kill时直接跟id

user表示当前连接用户

db表示当前进程连接哪个数据库

command表示当前连接执行的命令:sleep休眠,query查询,connect连接

state表示语句执行中的某一个状态或者一个sql语句

info表示执行的语句(sql语句或者命令)

kill掉线程:

mysqladmin processlist -uusername -ppassword kill $id

如果mysql中有大量sleep线程不释放,导致max_connections连接数过大(show variables like "max_connections"来查看设置的最大连接数),可以kill掉这些sleep连接,以下为shell脚本:

#!/bin/sh

username=passwd=host=

while:

do

n=`mysqladmin processlist -u$username -p$passwd -h$host | grep -i sleep | wc -l`

date=`date +%Y%m%d[%H:%M:%S]`

echo $nif [ "$n" -gt 50];thenfor i in `mysqladmin processlist -u$user -p$passwd -h$host | grep -i sleep | awk '{print $2}'`;do

mysqladmin-u$user -p$passwd -h$host kill $i

done

echo"sleep is too many I killed it" >> /tmp/sleep.log

echo"$date : $n" >> /tmp/sleep.log

fi

sleep1done

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值