网站突然连不上数据库?SHOW PROCESSLIST排查实录

来源:互联网 时间:2026-08-27

页面集体报数据库连接失败,重启MySQL能救急,但过几小时又犯。这种病根基本是连接堆积:请求速度超过消化速度,连接数堆到max_connections上限,新连接全被拒。排查工具就是一条SQL。

SHOW PROCESSLIST;
-- 输出关键列:Id、User、Host、db、Command、Time、State、Info
-- Time是当前状态持续秒数,找Time大的

-- 只看非睡眠连接,按耗时排
SELECT * FROM information_schema.processlist
WHERE command != 'Sleep'
ORDER BY time DESC LIMIT 20;

-- 当场杀掉卡死的连接
KILL 12345;

典型现场三种。一堆连接State是Sending data且Time几十秒往上,SQL没走索引,去慢查询日志里捞对应的语句;大量Sleep连接占着坑不走,是PHP代码连接用完没释放或连接池泄漏,从应用侧治;Locked状态一片,说明大事务锁表,找出源头事务优先处理。

-- 查当前连接数和上限
SHOW STATUS LIKE 'Threads_connected';
SHOW VARIABLES LIKE 'max_connections';

-- 查谁占着锁
SELECT * FROM sys.innodb_lock_waits;

急救之外要设防线:max_connections按内存算着调,别无脑拉大,每个连接都吃内存;应用端用持久连接或连接池但要配好回收;写个监控脚本每分钟查一次Threads_connected,超阈值就告警,别等用户替你发现故障。重启解决问题从来不是解决问题。

相关文章

标签:

A5创业网 版权所有

返回顶部