概述
- 以下是一份详细的 MySQL
SHOW PROCESSLIST
使用教程,帮助您监控和分析数据库当前活动,快速定位性能问题 - 资料已经分类整理好,喜欢的朋友自取:https://pan.quark.cn/s/f52968c518d3
1. 命令基本作用
SHOW PROCESSLIST
显示当前 MySQL 服务器上所有活跃的连接和线程信息,包括:
• 正在执行的查询(SELECT
/UPDATE
等)
• 后台线程(复制、清理临时表等)
• 空闲连接(如 Sleep
状态)
2. 基础语法
SHOW [FULL] PROCESSLIST;
• FULL
选项:显示完整的 SQL 语句(Info
列),否则默认截断前 100 个字符。
3. 输出字段详解
字段 | 说明 |
---|---|
Id | 连接/线程的唯一 ID,用于后续操作(如 KILL ) |
User | 连接的用户名(如 root@localhost ) |
Host | 客户端地址(IP:端口) |
db | 当前连接的默认数据库 |
Command | 线程正在执行的命令类型(如 Query 、Sleep 、Binlog Dump ) |
Time | 线程处于当前状态的时间(秒) |
State | 线程状态(如 Sending data 、Locked 、Copying to tmp table ) |
Info | 正在执行的 SQL 语句(未截断需用 SHOW FULL PROCESSLIST ) |
4. 常见场景与诊断
场景 1:查找慢查询
-- 按执行时间倒序查看活跃查询
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE COMMAND = 'Query'
ORDER BY TIME DESC;
重点关注:Time > N 秒
的查询,结合 Info
分析 SQL 效率。
场景 2:定位锁阻塞
-- 查找处于等待锁的线程
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE STATE LIKE '%Lock%';
典型状态:Waiting for table metadata lock
(元数据锁)、Waiting for row lock
(行锁)。
场景 3:识别空闲连接
-- 查找长时间空闲的连接(Sleep 状态)
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE COMMAND = 'Sleep' AND TIME > 60;
处理建议:关闭无用连接,减少连接池资源浪费。
5. 高级操作
终止问题线程
-- 根据 Id 终止线程(谨慎操作!)
KILL <thread_id>;
示例:
KILL 12345; -- 终止 Id=12345 的线程
自动监控脚本(示例)
-- 每 10 秒监控一次运行超过 30 秒的查询
SELECT
Id, User, Host, db, Command, TIME, STATE, LEFT(INFO, 200) AS SQL_TEXT
FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE COMMAND = 'Query' AND TIME > 30
ORDER BY TIME DESC;
6. 注意事项
权限要求:
•SHOW PROCESSLIST
:需PROCESS
权限。•
KILL
:需SUPER
或CONNECTION_ADMIN
权限。避免误杀:
• 生产环境谨慎使用KILL
,确认线程用途后再操作。性能影响:
• 频繁执行SHOW PROCESSLIST
可能轻微影响性能,建议通过监控工具(如 Percona Monitoring、Prometheus)替代。
7. 结合其他工具
• 慢查询日志:通过 long_query_time
配置记录慢 SQL。
• Performance Schema:深入分析线程活动(需启用该模块)。
• pt-kill(Percona Toolkit):自动终止符合条件的长查询。
总结
- 通过
SHOW PROCESSLIST
,您可以快速掌握数据库实时状态,定位性能瓶颈和异常行为。建议将此命令集成到日常监控流程中,结合自动化工具提升运维效率。