zoukankan      html  css  js  c++  java
  • 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 $n
        if [ "$n" -gt 50 ];then
            for 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               
        sleep 1
    done
  • 相关阅读:
    macos linux 命令行显示当前全路径方法
    mac 下面使用apidoc 使用
    du 统计文件夹大小
    mac 共享文件和mount挂载数据
    linux与linux、windows之间文件共享的几种方式
    Yaf安装和配置
    设计模式之 里氏替换原则
    设计模式之单一职责原则
    微信支付 遇到问题总结
    bash shell 快捷键
  • 原文地址:https://www.cnblogs.com/654wangzai321/p/8000815.html
Copyright © 2011-2022 走看看