MySQL性能分析工具:SHOW PROCESSLIST

概述

  • 以下是一份详细的 MySQL SHOW PROCESSLIST 使用教程,帮助您监控和分析数据库当前活动,快速定位性能问题
  • 资料已经分类整理好,喜欢的朋友自取:https://pan.quark.cn/s/f52968c518d3

1. 命令基本作用

SHOW PROCESSLIST 显示当前 MySQL 服务器上所有活跃的连接和线程信息,包括:

• 正在执行的查询(SELECT/UPDATE 等)

• 后台线程(复制、清理临时表等)

• 空闲连接(如 Sleep 状态)


2. 基础语法

sql 复制代码
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:查找慢查询

sql 复制代码
-- 按执行时间倒序查看活跃查询
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE COMMAND = 'Query'
ORDER BY TIME DESC;

重点关注:Time > N 秒 的查询,结合 Info 分析 SQL 效率。


场景 2:定位锁阻塞

sql 复制代码
-- 查找处于等待锁的线程
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE STATE LIKE '%Lock%';

典型状态:Waiting for table metadata lock(元数据锁)、Waiting for row lock(行锁)。


场景 3:识别空闲连接

sql 复制代码
-- 查找长时间空闲的连接(Sleep 状态)
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE COMMAND = 'Sleep' AND TIME > 60;

处理建议:关闭无用连接,减少连接池资源浪费。


5. 高级操作

终止问题线程

sql 复制代码
-- 根据 Id 终止线程(谨慎操作!)
KILL <thread_id>;

示例:

sql 复制代码
KILL 12345;  -- 终止 Id=12345 的线程

自动监控脚本(示例)

sql 复制代码
-- 每 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. 注意事项

  1. 权限要求:

    • SHOW PROCESSLIST:需 PROCESS 权限。

    • KILL:需 SUPER 或 CONNECTION_ADMIN 权限。

  2. 避免误杀:

    • 生产环境谨慎使用 KILL,确认线程用途后再操作。

  3. 性能影响:

    • 频繁执行 SHOW PROCESSLIST 可能轻微影响性能,建议通过监控工具(如 Percona Monitoring、Prometheus)替代。


7. 结合其他工具

• 慢查询日志:通过 long_query_time 配置记录慢 SQL。

• Performance Schema:深入分析线程活动(需启用该模块)。

• pt-kill(Percona Toolkit):自动终止符合条件的长查询。


总结

  • 通过 SHOW PROCESSLIST,您可以快速掌握数据库实时状态,定位性能瓶颈和异常行为。建议将此命令集成到日常监控流程中,结合自动化工具提升运维效率。
相关推荐
余槐i6 小时前
PostgreSQL 函数索引报错 must be immutable:3种绕法与代价
数据库·后端·sql·postgresql·性能优化
数据库小学妹6 小时前
PostgreSQL表膨胀怎么办?autovacuum清不动的根因与排查命令
数据库·postgresql·表膨胀·mvcc·数据库运维
mister_guo6 小时前
MySQL-1267错误:排序规则冲突的原因与解决方案
数据库·mysql
骇客野人7 小时前
在麒麟操作系统上 分别安装 jdk1.8, 达梦数据库,redis ,memcache 的操作实施方案和步骤
数据库·redis·memcached
美狐美颜SDK开放平台8 小时前
直播APP如何实现美白滤镜功能?视频美颜SDK技术开发方案详解
前端·数据库·人工智能·音视频·美颜sdk·直播美颜sdk·视频美颜sdk
Lost_the_wind8 小时前
MySQL学习笔记五
mysql
花间相见9 小时前
【计算基础|MySQL01】【上手】安装连接、数据类型与建库建表
数据库·后端
花间相见10 小时前
【计算基础|MySQL02】【上手】SQL 增删改查
数据库·后端
ITxiaobing202310 小时前
IP 库与 AppsFlyer 国家/地区数据不一致,如何系统地对账?
数据库·网络协议·tcp/ip
这个DBA有点耶10 小时前
从时间到语义:时序数据库与向量数据库的核心机制、选型与多模融合趋势
数据库·mysql·架构