🗄️ 第08章 · 状态与监控
SHOW STATUS / PROCESSLIST
状态与监控¶
这一章讲如何随时掌握 MySQL 的健康状况:当前跑着什么连接、有没有慢查询、缓存命中、线程/连接数、是否快被撑爆。运维里"数据库突然挂了"大多能靠这几条命令提前发现。
一步到位:SHOW STATUS¶
MySQL 有一堆运行状态计数器,按需查看:
-- 全量状态
SHOW GLOBAL STATUS;
-- 只看关心的几个(Uptime 运行时长, 连接数, 慢查询数)
SHOW GLOBAL STATUS LIKE 'Uptime';
SHOW GLOBAL STATUS LIKE 'Threads_connected';
SHOW GLOBAL STATUS LIKE 'Slow_queries';
SHOW GLOBAL STATUS LIKE 'Questions';
| 常用状态项 | 意义 | 关注点 |
|---|---|---|
Uptime |
已运行秒数 | 突然变小=重启过 |
Threads_connected |
当前连接数 | 接近 max_connections 会拒绝新连接 |
Max_used_connections |
历史最大连接数 | 用于评估该不该提高 max_connections |
Slow_queries |
慢查询总数 | 持续增长说明有慢 SQL |
Questions |
累计查询次数 | 看 QPS 趋势 |
Innodb_buffer_pool_reads |
逻辑读中未命中缓存的次数 | 高说明内存缓冲不足 |
看正在执行的语句¶
-- 当前所有连接在做什么
SHOW FULL PROCESSLIST;
-- 只看运行超过 5 秒的(慢查询/锁等待)
SELECT id, user, db, command, time, state, info
FROM information_schema.processlist
WHERE time > 5
ORDER BY time DESC;
提示 |
State列很关键:Waiting for table metadata lock/Waiting for lock常意味着有锁等待;Sending data长时间不动往往是慢查询。长时间卡住的会话可以用KILL <id>;终止。
配置与全局变量¶
-- 常用配置查看
SHOW VARIABLES LIKE 'max_connections';
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
SHOW VARIABLES LIKE 'long_query_time';
实战经验 | 生产常见告警与对策: -
max_connections用满 → 应用连接池没复用、或连接泄漏;排查并调大应用连接池 +max_connections。 -innodb_buffer_pool_size物理内存的 60%~80%(专用库)通常够用;设太小会频繁刷盘、全表扫描慢。 - 若表很大且InnoDB_buffer_pool_reads高 → 内存池不足,加内存/调大池大小。
性能视图(performance_schema / sys)¶
较新版本 MySQL 提供 performance_schema 与便捷的 sys schema,能一眼看到"TOP 消耗":
-- 用 sys 库看最耗时的语句
SELECT * FROM sys.statement_analysis ORDER BY total_latency DESC LIMIT 10;
-- 看占用最多等待/IO 的
SELECT * FROM sys.io_global_by_file_by_bytes ORDER BY total_bytes DESC LIMIT 5;
-- 看连接最多的用户
SELECT * FROM sys.processlist ORDER BY time DESC;
集成到监控(Prometheus 之类)¶
在生产,你会把 MySQL 指标纳入监控(如本机 Prometheus + mysqld-exporter)。关键采集点:
- 连接数 vs
max_connections - 慢查询计数
Slow_queries Innodb_buffer_pool_reads / reads比率- QPS(
Questions差分) - 主从延迟(如有复制)
提示 | 这里的
SHOW STATUS就是监控抓数的基础。知道了哪些指标重要,才能配好告警阈值(详见《监控与日志 · Prometheus 概述》与《告警规则》)。
相关命令¶
SHOW GLOBAL STATUS/SHOW VARIABLES看状态与配置。SHOW FULL PROCESSLIST看连接与阻塞。information_schema.processlist做按条件过滤。
安全 |
processlist会暴露 SQL 内容,生产环境只给有权限的运维账号查看。