重启服务(紧急情况下看可否恢复服务),然后再排除故障原因
看线上进程,看运行SQL,看运行最久的,看SQL状态。
问题排查步骤如下 ↓↓↓:
方向1:有人建议:max_connections 这个值可以先改大一点临时解决一下问题先 。
方向2:执行 show processlist命令
注解:show processlist 是显示用户正在运行的线程,需要注意的是,除了 root 用户能看到所有正在运行的线程外,其他用户都只能看到自己正在运行的线程,
看不到其它用户正在运行的线程。除非单独个这个用户赋予了PROCESS 权限。
方向3:执行show variables like ‘%timeout%’命令
查看超时,或锁死情况。
方向4:执行show engine innodb status命令
那show engine innodb status 展示了多少信息,这些信息对系统的状态。
看是否存在,connect数一直在增,buffer缓冲池已经占用完的情况。
再次执行 show processlist 查看当前的SQL进程,认真分析罪魁祸首,SQLs是否在一直在执行
关键步骤:
主要执行 show processlist,看到所有操作表的线程
发现 state状态为 tmp table,这是因为临时结果集大于tmp_table_size,正在将临时表从内存存储转为磁盘存储以此节省内存
解决方案:
暂时停掉该SQL的业务,紧急优化sql。