通过SHOW GLOBAL STATUS命令可快速诊断MySQL负载:Threads_connected和Threads_running反映连接与活跃线程压力;Questions/Uptime得QPS,Slow_queries/Questions得慢查占比;缓冲池命中率低于95%需调大innodb_buffer_pool_size;Innodb_row_lock_waits和Innodb_row_lock_time_avg突增表明锁争用严重。

直接查几个关键状态值,就能快速掌握 MySQL 当前负载情况,不需要装额外工具或等报表生成。
看连接数和活跃线程
连接堆积是最直观的负载信号。执行:
SHOW GLOBAL STATUS LIKE 'Threads%';
重点关注:
-
Threads_connected:当前打开的连接数,持续接近
max_connections(默认151)说明连接池可能不足或有泄漏 - Threads_running:正在执行查询的线程数,若远超 CPU 核心数(比如 16 核机器上长期 >32),说明查询排队严重
- Aborted_connects:异常连接失败次数,突然上升可能意味着认证失败、网络闪断或防火墙拦截
看查询吞吐与慢查询比例
反映数据库实际工作强度:
SHOW GLOBAL STATUS LIKE 'Questions';
SHOW GLOBAL STATUS LIKE 'Slow_queries';
SHOW GLOBAL STATUS LIKE 'Uptime';
用 Questions / Uptime 算出 QPS(每秒查询数);再算 Slow_queries / Questions 得到慢查询占比。建议把 long_query_time 设为 0.1 秒而非默认 10 秒,才能捕获真实影响体验的“准慢查询”。
看 InnoDB 缓冲池效率
内存是否扛得住,决定磁盘 I/O 压力大小:
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_read%';
计算缓冲池命中率:
(Innodb_buffer_pool_read_requests − Innodb_buffer_pool_reads) / Innodb_buffer_pool_read_requests
低于 95% 就该考虑增大 innodb_buffer_pool_size;若长期低于 90%,I/O 瓶颈很可能已出现。
看锁等待和行级争用
高并发下性能下降的常见元凶:
SHOW GLOBAL STATUS LIKE 'Innodb_row_lock%';
重点关注:
- Innodb_row_lock_waits:单位时间内锁等待次数突增,说明事务冲突变多
- Innodb_row_lock_time_avg:平均每次锁等待毫秒数,超过 50ms 就需检查是否有缺失索引或长事务
配合 SELECT * FROM information_schema.INNODB_TRX 可看到当前运行中的长事务。











