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官方文档

相关推荐
难以触及的高度8 分钟前
mysql中between and怎么用
数据库·mysql
Jacky(易小天)22 分钟前
MongoDB比较查询操作符中英对照表及实例详解
数据库·mongodb·typescript·比较操作符
Karoku0661 小时前
【企业级分布式系统】ELK优化
运维·服务器·数据库·elk·elasticsearch
小技与小术2 小时前
数据库表设计范式
数据库·mysql
安迁岚2 小时前
【SQL Server】华中农业大学空间数据库实验报告 实验三 数据操作
运维·服务器·数据库·sql·mysql
安迁岚2 小时前
【SQL Server】华中农业大学空间数据库实验报告 实验九 触发器
数据库·sql·mysql·oracle·实验报告
Loganer2 小时前
MongoDB分片集群搭建
数据库·mongodb
LKID体2 小时前
Python操作neo4j库py2neo使用之创建和查询(二)
数据库·python·neo4j
刘大浪3 小时前
后端数据增删改查基于Springboot+mybatis mysql 时间根据当时时间自动填充,数据库连接查询不一致,mysql数据库连接不好用
数据库·spring boot·mybatis
一只爱撸猫的程序猿3 小时前
简单实现一个系统升级过程中的数据平滑迁移的场景实例
数据库·spring boot·程序员