MySQL 中的 processlist
可以展示 MySQL 中有哪些线程在运行。
在 MySQL 中执行下述命令,得到的结果如下图所示:
上图中的各列名及其取值如下所示:
-
id
:线程标志,系统分配的connection_id
,可以使用select connection_id()
查看,出问题也是用 kill + id 去杀线程,使用mysql > kill id;
; -
User
:显示当前用户,如果当前不是用root
查询,这个命令只显示用户权限范围的sql语句; -
Host
:该语句是来源,即从哪个IP和端口访问的; -
db
:显示当前进程连接的数据库 -
Command
:执行的命令类型,一般是休眠(sleep
),查询(query
),连接(connect
); -
Time
:SQL语句持续的时间,单位是秒; -
State
:语句执行状态,有copying to tmp table
,Sorting result
,Sending data
等状态; -
info
:显示执行的 SQL 语句;
State 列的状态
-
Checking table
:检查表; -
Closing tables
:将表中修改的数据刷新(Flush)到磁盘中,同时关闭已经用完的表; -
Copying to tmp table on disk
:内存存储转换为硬盘存储; -
Creating tmp table
:创建临时表; -
deleting from main table
:多表删除中的第一步; -
deleting from reference tables
:多表删除中的第二步; -
Flushing tables
:FLUSH TABLES
,等待其他线程关闭数据表 -
Locked
:查询有锁; -
Sending data
:正在执行 SELECT 查询,然后把结果发送给客户端; -
Sorting for group
:正在为分组排序; -
Sorting for order
:正在排序
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: 正在发送表的内容到从服务器 Time: Unused