mysql show processlist 命令

SHOW PROCESSLIST显示正在运行(用户运行线程)的线程(或SHOW FULL PROCESSLIST显示更多信息)。
如果没有FULL关键字, SHOW PROCESSLIST则只显示Info字段中每个语句的前 100 个字符 。
线程可以用KILL语句杀死。
kill thread_id;
以下是SHOW PROCESSLIST输出示例:
mysql> show full processlist;
+-----+------+-----------------+--------------+---------+------+----------+-----------------------+
| Id | User | Host | db | Command | Time | State | Info |
+-----+------+-----------------+--------------+---------+------+----------+-----------------------+
| 911 | root | 127.0.0.1:64400 | NULL | Sleep | 75 | | NULL |
| 912 | root | 127.0.0.1:54023 | his-pre-0819 | Query | 0 | starting | show full processlist |
| 913 | root | 127.0.0.1:61985 | his-dev-0818 | Sleep | 77 | | NULL |
| 914 | root | 127.0.0.1:61986 | dev-test | Sleep | 77 | | NULL |
+-----+------+-----------------+--------------+---------+------+----------+-----------------------+
4 rows in set (0.04 sec)
mysql>
各个列名的含义:
- Id 线程关联的客户端的连接标识符。
- User 线程关联的帐户。
- Host 发出该语句的客户端的主机名(system user没有主机除外), 格式: host_name:client_port。
- db 当前线程的默认数据库,或者NULL如果没有选择。
- Command 显示这个线程此刻正在执行的命令,一般对应DDL或DML语句。
- Time 指示线程处于当前状态的时间。在某些情况下,线程的当前时间概念可能会改变:线程可以使用 更改时间 。对于副本 SQL 线程,该值是上次复制事件的时间戳与副本主机的实时时间之间的秒数。
- State 对应Command指令,大多数状态对应于非常快速的操作。如果线程在给定状态下保持多秒,则可能存在需要调查的问题。
- Info Info指示线程正在执行的语句,或者NULL如果它不执行任何语句。对于show processlist,此值仅包含语句的前 100 个字符。要查看完整的语句,请使用 show full processlist;
线程命令(Command)值
线程可以具有以下任何 Command值:
- Binlog Dump这是复制源上的线程,用于将二进制日志内容发送到副本。
- Change user该线程正在执行更改用户操作。
- Close stmt该线程正在关闭准备好的语句。
- Connect副本连接到其源。
- Connect Out副本正在连接到其源。
- Create DB该线程正在执行创建数据库操作。
- Daemon该线程在服务器内部,而不是为客户端连接提供服务的线程。
- Debug该线程正在生成调试信息。
- Delayed insert该线程是一个延迟插入处理程序。
- Drop DB该线程正在执行删除数据库操作。
- Error
- Execute线程正在执行准备好的语句。
- 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当线程在创建表的函数结束时创建表(包括内部临时表)时,就会发生这种情况。即使由于某些错误无法创建表,也会使用此状态。
- altering table服务器正在执行ALTER TABLE.
- Analyzing该线程正在计算MyISAM表键分布(例如,ANALYZE TABLE。
- checking permissions线程正在检查服务器是否具有执行语句所需的权限。
- Checking table该线程正在执行表检查操作。
- cleaning up线程已经处理了一个命令并准备释放内存并重置某些状态变量。
- closing tables该线程正在将更改的表数据刷新到磁盘并关闭已使用的表。这应该是一个快速的操作。如果没有,请确认您没有完整的磁盘并且该磁盘没有被大量使用。
- converting HEAP to ondisk该线程正在将内部临时表从 MEMORY表转换为磁盘表。
- copy to tmp table线程正在处理一个ALTER TABLE语句。这种状态发生在具有新结构的表被创建之后但在行被复制到其中之前。
- Copying to group table如果语句具有不同ORDER BY和 GROUP BY标准,各行按组排列和复制到一个临时表。
- Copying to tmp table服务器正在复制到内存中的临时表。
- Copying to tmp table on disk服务器正在复制到磁盘上的临时表。临时结果集变得太大。线程将临时表从内存中更改为基于磁盘的格式以节省内存。
- Creating index该线程正在处理ALTER TABLE ... ENABLE KEYS一个MyISAM表。
- Creating sort index该线程正在处理SELECT使用内部临时表解析的a 。
- creating table该线程正在创建一个表。这包括创建临时表。
- Creating tmp table该线程正在内存或磁盘上创建临时表。如果表是在内存中创建的,但后来转换为磁盘上的表,则该操作期间的状态为Copying to tmp table on disk。
- committing alter table to storage engine服务器已就地完成 ALTER TABLE并提交结果。
- deleting from main table服务器正在执行多表删除的第一部分。它仅从第一个表中删除,并保存用于从其他(参考)表中删除的列和偏移量。
- deleting from reference tables服务器正在执行多表删除的第二部分,并从其他表中删除匹配的行。
- discard_or_import_tablespace线程正在处理ALTER TABLE ... DISCARD TABLESPACEorALTER TABLE ... IMPORT TABLESPACE语句。
- end这发生在最后但在清理 ALTER TABLE,CREATE VIEW,DELETE,INSERT,SELECT, 或UPDATE`语句之前。对于end状态,可能会发生以下操作:更改表中的数据后删除查询缓存条目将事件写入二进制日志释放内存缓冲区,包括用于 blob
- executing线程已开始执行语句。
- Execution of init_command线程正在执行init_command系统变量值中的语句 。
- freeing items线程已执行命令。在此状态期间完成的一些项目释放涉及查询缓存。此状态通常后跟cleaning up.
- FULLTEXT initialization服务器正准备执行自然语言全文搜索。
- init出现这种情况的初始化之前 ALTER TABLE,DELETE,INSERT,SELECT,或 UPDATE语句。服务器在此状态下采取的操作包括刷新二进制日志、InnoDB日志和一些查询缓存清理操作。
- Killed有人KILL向线程发送了一条语句,它应该在下次检查终止标志时中止。该标志在 MySQL 的每个主要循环中都被检查,但在某些情况下,线程可能仍然需要很短的时间。如果该线程被某个其他线程锁定,则一旦其他线程释放其锁,kill 就会生效。
- logging slow query该线程正在向慢查询日志写入一条语句。
- login连接线程的初始状态,直到客户端通过身份验证成功。
- manage keys服务器正在启用或禁用表索引。
- Opening tables该线程正在尝试打开一个表。这应该是一个非常快的过程,除非有什么东西阻止了打开。例如,一个ALTER TABLE或一个 LOCK TABLE语句可以阻止打开一个表,直到该语句完成。还值得检查您的table_open_cache是否足够大。
- optimizing服务器正在为查询执行初始优化。
- preparing此状态发生在查询优化期间。
- Purging old relay logs该线程正在删除不需要的中继日志文件。
- query end此状态发生在处理查询之后但在该freeing items状态之前 。
- Receiving from client服务器正在从客户端读取数据包。这个状态Reading from net在 MySQL 5.7.8 之前被调用。
- Removing duplicates查询的使用 SELECT DISTINCT方式使得 MySQL 无法在早期优化掉不同的操作。因此,在将结果发送到客户端之前,MySQL 需要一个额外的阶段来删除所有重复的行。
- removing tmp table线程在处理SELECT语句后删除内部临时表。如果没有创建临时表,则不使用此状态。
- rename该线程正在重命名表。
- rename result table线程正在处理一条ALTER TABLE语句,创建了新表,并正在重命名它以替换原始表。
- Reopen tables线程获得了表的锁,但在获得锁后注意到底层表结构发生了变化。它释放了锁,关闭了表,并试图重新打开它。
- Repair by sorting修复代码正在使用排序来创建索引。
- preparing for alter table服务器正准备执行就地ALTER TABLE.
- Repair done该线程已完成对MyISAM表的多线程修复 。
- Repair with keycache修复码是通过密钥缓存一一创建密钥。这比Repair by sorting.
- Rolling back该线程正在回滚事务。
- Saving state对于MyISAM修复或分析等表操作,线程正在将新表状态保存到.MYI文件头中。状态包括诸如行数、 AUTO_INCREMENT计数器和密钥分布等信息。
- Searching rows for update该线程正在执行第一阶段以在更新它们之前找到所有匹配的行。如果UPDATE正在更改用于查找相关行的索引,则必须这样做 。
- Sending data该线程正在读取和处理SELECT语句的行 ,并将数据发送到客户端。由于在此状态期间发生的操作往往会执行大量磁盘访问(读取),因此它通常是给定查询生命周期中运行时间最长的状态。
- Sending to client服务器正在向客户端写入数据包。这个状态Writing to net在 MySQL 5.7.8 之前被调用。
- setup线程正在开始ALTER TABLE操作。
- Sorting for group该线程正在执行排序以满足 a GROUP BY。
- Sorting for order该线程正在执行排序以满足ORDER BY.
- Sorting index该线程正在对索引页进行排序,以便在MyISAM表优化操作期间进行更有效的访问。
- Sorting result对于SELECT语句,这类似于Creating sort index,但适用于非临时表。
- starting语句执行开始时的第一阶段。
- statistics服务器正在计算统计信息以制定查询执行计划。如果一个线程长时间处于这种状态,则服务器可能是磁盘绑定执行其他工作。
- System lock该线程已被调用mysql_lock_tables() ,此后线程状态尚未更新。例如,线程将请求或等待表的内部或外部系统锁。
- update线程正准备开始更新表。
- Updating该线程正在搜索要更新的行并正在更新它们。
- updating main table服务器正在执行多表更新的第一部分。它只更新第一个表,并保存用于更新其他(参考)表的列和偏移量。
- updating reference tables服务器正在执行多表更新的第二部分,并更新其他表中匹配的行。
- User lock线程将要请求或正在等待通过GET_LOCK()调用请求的咨询锁 。对于 SHOW PROFILE,这种状态意味着线程正在请求锁定(而不是等待它)。
- User sleep线程调用了一个 SLEEP()调用。
- Waiting for commit lock
FLUSH TABLES WITH READ LOCK正在等待提交锁。
- Waiting for global read lock
FLUSH TABLES WITH READ LOCK正在等待全局读锁或read_only正在设置全局 系统变量。
- Waiting for tables线程收到通知,指出表的基础结构已更改,需要重新打开表以获取新结构。但是,要重新打开该表,它必须等到所有其他线程都关闭了该表。
- Waiting for table flush线程正在执行FLUSH TABLES并等待所有线程关闭它们的表,或者线程收到通知,表明表的基础结构已更改,需要重新打开表以获取新结构。但是,要重新打开该表,它必须等到所有其他线程都关闭了该表。
- Waiting for *lock_type* lock服务器正在等待THR_LOCK从元数据锁定子系统获取 锁或锁,其中 lock_type表示锁的类型。此状态表示等待 a THR_LOCK:Waiting for table level lock这些状态表示等待元数据锁定:Waiting for event metadata lockWaiting for global read lockWaiting for schema metadata lockWaiting for stored function metadata lockWaiting for stored procedure metadata lockWaiting for table metadata lockWaiting for trigger metadata lock
- Waiting on cond线程正在等待条件变为真的通用状态。没有可用的特定状态信息。
- Writing to net服务器正在向网络写入数据包。此状态Sending to client自 MySQL 5.7.8 起。
其他状态:
除此之外还存在其他状态:
- 查询缓存线程状态
- 复制源线程状态
- 复制副本 I/O 线程状态
- 复制副本 SQL 线程状态
- 复制副本连接线程状态
- 事件计划程序线程状态