SHOW PROCESSLIST显示正在运行(用户运行线程)的线程(或SHOW FULL PROCESSLIST显示更多信息)
https://dev.mysql.com/doc/internals/en/client-server-protocol.html
https://dev.mysql.com/doc/internals/en/capability-flags.html#packet-Protocol::CapabilityFlags
https://dev.mysql.com/doc/internals/en/com-query-response.html#packet-Protocol::ColumnType
https://dev.mysql.com/doc/internals/en/status-flags.html
https://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::Handshake
https://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::AuthSwitchResponse
https://dev.mysql.com/doc/internals/en/com-query-response.html#packet-ProtocolText::Resultset
还可以从INFORMATION_SCHEMA PROCESSLIST表或mysqladmin processlist命令获取此信息。如果你有这个PROCESS特权,你可以看到所有的线程。否则,您只能看到自己的线程(即与您正在使用的MySQL帐户相关联的线程)。如果不使用该FULL关键字,则每个语句的前100个字符都将显示在该Info字段中。
进程信息也可从performance_schema.threads表中获得。但是,访问threads不需要互斥锁,对服务器性能影响最小。INFORMATION_SCHEMA.PROCESSLIST和SHOW PROCESSLIST由于需要互斥锁而具有负面的性能后果。performance_schema.threads还显示有关后台线程,哪些信息在INFORMATION_SCHEMA.PROCESSLIST和SHOW PROCESSLIST中没有,这意味着performance_schema.threads可以用来监视活动的其他线程信息源。
SHOW PROCESSLIST如果您收到“ 太多连接 ” 错误消息,并且想要了解发生了什么, 该声明非常有用。MySQL保留一个额外的连接以供有权限的帐户使用SUPER,以确保管理员始终能够连接和检查系统(假设您没有向所有用户授予此权限)。
线程可以用KILL语句杀死。
所产生的列SHOW PROCESSLIST具有以下含义:
Id
连接标识符,这是同一类型的在所显示的值ID的列INFORMATION_SCHEMA.PROCESSLIST表,该PROCESSLIST_ID性能视图的列threads 表,并且通过返回的 CONNECTION_ID()功能。
User
发出声明的MySQL用户,如果是system user,它是指由服务器产生的非客户线程,以在内部处理任务。这可能是复制从站或延迟行处理程序使用的I / O或SQL线程。unauthenticated user指的是已经与客户端连接关联但是还没有完成客户机用户的认证的线程。 event_scheduler指的是监视预定事件的线程。如果是system user那么在Host列中不会指定主机 。
Host
发出该语句的客户端的主机名(system user没有主机除外),以便更容易地确定哪个客户端正在做什么,显示方式:host_name:client_port。
db
当前执行语句对应的默认数据库,如果选择了;否则为NULL。
Command
显示这个线程此刻正在执行的命令,一般对应DDL或DML语句。
Time
表示线程处于当前状态的时间长短,线程当前时间的概念在某些情况下可能会发生改变:线程可以改变时间。对于正在从主机处理事件的从站上运行的线程,线程时间设置为事件中发现的时间,因此反映了主站而不是从站的当前时间。SET TIMESTAMP = value。
State
对应Command指令,大多数状态对应于非常快速的操作。如果线程在给定状态下保持多秒,则可能存在需要调查的问题。
Info
包含由线程执行的语句的文本或者NULL,如果它不是执行的话。默认情况下,此值仅包含语句的前100个字符。要查看完整的语句,请使用SHOW FULL PROCESSLIST。
二、线程命令(Command)值
线程可以具有以下任何 Command值:
Binlog Dump:这是主服务器上的线程,用于将二进制日志内容发送到从服务器。
Table Dump:线程将表内容发送到从服务器。
Change user:线程正在执行改变用户操作。
Close stmt:线程正在关闭准备好的语句。
Connect:复制中,从服务器连接到其主服务器。
Connect Out:复制中,从服务器正在连接到其主服务器。
Create DB:线程正在执行create-database操作。
Daemon:此线程在服务器内部,而不是服务客户端连接的线程。
Debug:线程正在生成调试信息。
Delayed insert:线程是一个延迟插入处理程序。
Drop DB:线程正在执行drop-database操作。
Execute:线程正在执行一个准备好的语句(prepare statement类型就是预编译的语句,JDBC支持次类型执行SQL)。
Fetch:线程正在执行一个准备语句的结果。
Field List:线程正在检索表列的信息。
Init DB:线程正在选择默认数据库。
Kill:线程正在杀死另一个线程。
Long Data:该线程在执行一个准备语句的结果中检索长数据。
Ping:线程正在处理服务器ping请求。
Prepare:线程正在为语句生成执行计划。
Processlist:线程正在生成有关服务器线程的信息。
Query:该线程正在执行一个语句。
Quit:线程正在终止。
Refresh:线程是刷新表,日志或缓存,或重置状态变量或复制服务器信息。
Register Slave:线程正在注册从服务器。
Reset stmt:线程正在重置一个准备好的语句。
Set option:线程正在设置或重置客户端语句执行选项。
Shutdown:线程正在关闭服务器。
Sleep:线程正在等待客户端向其发送新的语句。
Statistics:线程正在生成服务器状态信息。
Time:没用过。
三、线程状态(State)值
一般线程状态(State)值
以下列表描述State 了与常规查询处理关联的线程值,而不是更复杂的活动,例如复制。其中许多仅用于在服务器中查找错误。
After create:当线程创建表(包括内部临时表)时,会在创建表的函数的末尾创建。即使由于某些错误而无法创建表,也会使用此状态。
Analyzing:线程正在计算MyISAM表密钥分布(例如:for ANALYZE TABLE)。
checking permissions:线程正在检查服务器是否具有执行语句所需的权限。
Checking table:线程正在执行表检查操作。
cleaning up:线程已经处理了一个命令,正在准备释放内存并重置某些状态变量。
closing tables:线程将更改的表数据刷新到磁盘并关闭已用表。这应该是一个快速的操作。如果没有,请验证您是否没有完整的磁盘,并且磁盘没有被非常大的使用。
copy to tmp table:线程正在处理ALTER TABLE语句。此状态发生在已创建新结构的表之后,但是将行复制到该表之前。对于此状态的线程,可以使用性能模式来获取有关复制操作的进度。
https://www.jb51.net/article/156313.htm
https://blog.csdn.net/dhfzhishi/article/details/81263084
https://www.cnblogs.com/remember-forget/p/10400496.html
https://blog.csdn.net/weixin_34357436/article/details/91768402