Mysql的Processlist怎么用

Mysql查看Processlist

方法一:使用命令行工具
sql 复制代码
SHOW PROCESSLIST;
方法一:使用Navicat客户端

以navicat16来说,依次打开"工具" -> "服务器监控" -> "MySQL"

方法三:由于show processlist显示的信息都是来自MySQL系统库information_schema中的processlist表,所以使用以下sql查询也可以
sql 复制代码
SELECT * FROM information_schema.processlist;
Processlist中的信息

在Processlist中,每个线程都有一条记录,包含了以下信息:

Server:当前主机IP。

ID:线程的唯一标识,也是information_schema.processlist表的主键,可以通过kill来终止此线程的链接。

USER:连接到数据库的用户。

HOST:连接到数据库的主机及端口。

DB:当前所使用的数据库,如果没有则为null。

COMMAND:线程当前连接执行的命令,一般就是休眠或空闲(sleep),查询(query),连接(connect)。

TIME:线程已经运行的时间(以秒为单位)。

STATE:线程当前的状态,state只是语句执行中的某一个状态,一个sql语句(已查询为例),可能需要经过copying to tmp table,Sorting result,Sending data等状态才可以完成。

INFO:线程当前执行的SQL语句,如果没有语句执行则为null。这个语句可以使客户端发来的执行语句也可以是内部执行的语句,默认只显示前100个字符,也就是你看到的语句可能是截断了的,要看全部信息,需要使用 show full processlist。

注意:root用户使用此命令能看到所有正在运行的线程,其他用户都只能看到自己正在运行的线程,看不到其它用户正在运行的线程。除非单独个这个用户赋予了PROCESS 权限。

Command

Command的状态大部分都是sleep对我们分析问题没什么作用,可以进行以下过滤,来查询非 Sleep 状态的链接,按消耗时间倒序展示,也可根据情况自己加条件过滤

sql 复制代码
SELECT
	id,
	db,
	USER,
	HOST,
	command,
	time,
	state,
	info 
FROM
	information_schema.PROCESSLIST 
WHERE
	command != 'Sleep' 
ORDER BY
	time DESC

这样就过滤出来哪些是正在干活的,按照消耗时间倒序,排在最前面的,很可能就是有问题的链接了,然后查看INFO一列,就能看到具体执行的什么 SQL 语句了。

Command值说明

Binlog Dump: 主节点正在将二进制日志 ,同步到从节点

Change User: 正在执行一个 change-user 的操作

Close Stmt: 正在关闭一个Prepared Statement 对象

Connect: 一个从节点连上了主节点

Connect Out: 一个从节点正在连主节点

Create DB: 正在执行一个create-database 的操作

Daemon: 服务器内部线程,而不是来自客户端的链接

Debug: 线程正在生成调试信息

Delayed Insert: 该线程是一个延迟插入的处理程序

Drop DB: 正在执行一个 drop-database 的操作

Execute: 正在执行一个 Prepared Statement

Fetch: 正在从Prepared Statement 中获取执行结果

Field List: 正在获取表的列信息

Init DB: 该线程正在选取一个默认的数据库

Kill: 正在执行 kill 语句,杀死指定线程

Long Data: 正在从Prepared Statement 中检索 long data

Ping: 正在处理 server-ping 的请求

Prepare: 该线程正在准备一个 Prepared Statement

ProcessList: 该线程正在生成服务器线程相关信息

Query: 该线程正在执行一个语句

Quit: 该线程正在退出

Refresh: 该线程正在刷表,日志或缓存;或者在重置状态变量,或者在复制服务器信息

Register Slave: 正在注册从节点

Reset Stmt: 正在重置 prepared statement

Set Option: 正在设置或重置客户端的 statement-execution 选项

Shutdown: 正在关闭服务器

Sleep: 正在等待客户端向它发送执行语句

Statistics: 该线程正在生成 server-status 信息

Table Dump: 正在发送表的内容到从服务器

kill 使用

通过前面的查询,我们查到了问题sql,使用kill来杀死线程

sql 复制代码
kill 线程ID
STATE

MySQL 8.4官方文档

相关推荐
foolishlee5 分钟前
Neon wal日志处理流程
数据库
星马梦缘12 分钟前
数据库 事务管理 专项作战记录
数据库
名字还没想好☜27 分钟前
Python concurrent.futures 实战:用 ThreadPoolExecutor 并发处理 + as_completed 收结果
数据库·python·php·并发
空杆推不起40 分钟前
穿透数据库 JOIN 核心:语法分类、底层算法、生产优化与高频坑点全解析
数据库·oracle
xxwl5851 小时前
数据库后端接口测试报告
spring boot·mysql·tomcat
xqqxqxxq1 小时前
MySQL 数据类型笔记
数据库·笔记·mysql
Logintern092 小时前
理解MySQL数据库的“事务与锁”
数据库·mysql
朱容zr3331332 小时前
为什么推荐使用自增主键?使用UUID作为主键的优缺点是什么?
java·运维·数据库·后端·mysql·面试·性能优化
麻瓜code2 小时前
【Redis 】数据类型、持久化与过期删除
数据库·redis·缓存
空杆推不起2 小时前
穿透 Flink CDC 表层用法:数据库日志捕获机制、Flink Source 运行时、端到端一致性底层原理详解
大数据·数据库·flink