MySQL如何查看线程信息?看完就懂了

您所在的位置:网站首页 高性能mysql看不懂 MySQL如何查看线程信息?看完就懂了

MySQL如何查看线程信息?看完就懂了

#MySQL如何查看线程信息?看完就懂了| 来源: 网络整理| 查看: 265

目录 前言SHOW PROCESSLIST

前言

在某些情况下,我们可能需要找出Mysql的某个线程。比如在发生死锁的时候,我们可以相应找到锁线程,然后把它kill 。那么,如何查看MySQL的线程信息呢?使用下面这个命令就可以了

SHOW PROCESSLIST

SHOW PROCESSLIST语句可以查看MySQL的线程信息。SHOW PROCESSLIST可以显示哪些线程正在运行和相关的信息。

语法:

SHOW [FULL] PROCESSLIST

不在mysql提示符下使用时用mysql -uroot -e ‘Show processlist’ 或者 mysqladmin processlist

如果您拥有PROCESS权限(比如root账号),您可以查看所有线程,甚至属于其他用户的线程。否则,非匿名用户可以访问自己线程的信息(登录的用户自己的线程),但不能访问其他用户的线程,匿名用户无法访问线程信息。

如果没有FULL关键字,SHOW PROCESSLIST只在Info字段中显示每个语句的前100个字符。

线程可以用KILL语句终止。

示例:

在这里插入图片描述 参数

id #ID标识,要kill一个语句的时候很有用 use #当前连接用户 host #显示这个连接从哪个ip的哪个端口上发出 db #线程连接的数据库,如果没有选择,则为NULL。 command #客户端线程正在执行的命令类型,一般有休眠(sleep),查询(query),连接(connect),例如会话空闲则休眠 time #连接持续时间,单位是秒 state #指示线程正在做什么的动作、事件或状态。大多数状态对应于非常快速的操作。如果一个线程在给定状态中停留了许多秒,那么可能存在需要调查的问题。 info #线程正在执行的语句,如果没有执行语句,则为NULL。该语句可以是发送到服务器的语句,也可以是最内层的语句(如果该语句执行其他语句的话)。例如,如果一个CALL语句执行一个正在执行SELECT语句的存储过程,则Info值显示SELECT语句。

其中state的状态十分关键,下面介绍下state主要状态和描述:

altering table 服务器正在执行一个ALTER TABLE checking permissions 线程正在检查服务器是否拥有执行语句所需的权限。 Checking table 线程正在执行一个表检查操作。 cleaning up 线程已经处理了一个命令,并准备释放内存和重置某些状态变量。 Closing tables 正在将表中修改的数据刷新到磁盘中,同时正在关闭已经用完的表。这是一个很快的操作,如果不是,请检查磁盘是否已满,磁盘是否被大量使用。 copy to tmp table 线程正在处理一条ALTER TABLE语句。这种状态发生在创建了具有新结构的表之后,但在将行复制到该表之前。 Copying to tmp table on disk 由于临时结果集大于tmp_table_size,正在将临时表从内存存储转为磁盘存储以此节省内存。 deleting from main table 服务器正在执行多表删除的第一部分。它只删除第一个表,并保存用于从其他(引用)表删除的列和偏移量。 deleting from reference tables 服务器正在执行多表删除的第二部分,并从其他表中删除匹配的行。 end 这发生在ALTER TABLE、CREATE VIEW、DELETE、INSERT、SELECT或UPDATE语句清理之前的末尾。 对于结束状态,可能会发生以下操作: 1、修改表中的数据后删除查询缓存项 2、将事件写入二进制日志 3、释放内存缓冲区,包括用于blob的缓冲区 executing 线程开始执行一条语句。 init 这发生在ALTER TABLE、DELETE、INSERT、SELECT或UPDATE语句初始化之前。在这种状态下,服务器采取的操作包括清空二进制日志、InnoDB日志和一些查询缓存清理操作。 Killed 发送了一个kill请求给某线程,那么这个线程将会检查kill标志位,同时会放弃下一个kill请求。MySQL会在每次的主循环中检查kill标志位,不过有些情况下该线程可能会过一小段才能死掉。如果该线程程被其他线程锁住了,那么kill请求会在其他线程释放锁时生效。 logging slow query 线程正在向慢查询日志写入一条语句。 manage keys 服务器正在启用或禁用一个表索引。 Opening tables 线程试图打开一个表。这应该是一个非常快的过程,除非有什么东西阻止打开。例如,ALTER TABLE或LOCK TABLE语句可以阻止打开一个表,直到语句完成。还需要检查table_open_cache值是否足够大。 optimizing 服务器正在对查询执行初始优化。 query end 此状态发生在处理查询之后,但在释放项状态之前。 Removing duplicates 查询使用SELECT DISTINCT的方式,MySQL不能在早期阶段优化掉DISTINCT操作。因此,MySQL在将结果发送到客户端之前需要一个额外的阶段来删除所有重复的行。 removing tmp table 线程正在处理一个SELECT语句后删除一个内部临时表。如果没有创建临时表,则不使用此状态。 Receiving from client 服务器正在从客户端读取数据包。在MySQL 5.7.8之前,这个状态叫做Reading from net。 Reopen tables 线程获得了表的锁,但在获得锁后注意到底层表结构发生了变化。它释放了锁,关闭了表,并试图重新打开它。 Rolling back 线程正在回滚事务。 starting 语句执行开始的第一个阶段。 Sending data 线程正在读取和处理SELECT语句的行,并向客户机发送数据。由于在此状态下发生的操作往往会执行大量的磁盘访问(读取),因此在给定查询的生命周期中,它通常是运行时间最长的状态。 Sorting for group 线程正在进行排序,以满足GROUP BY的要求。 Sorting for order 线程正在执行排序以满足ORDER BY。 statistics 服务器正在计算统计数据以制定查询执行计划。如果一个线程长时间处于这种状态,那么服务器可能是磁盘绑定的,正在执行其他工作。 System lock 线程调用了mysql_lock_tables(),并且线程状态一直没有更新。这是一种非常普遍的状态,可能由于许多原因而发生。 例如,线程将请求或等待表的内部或外部系统锁。当InnoDB在执行锁表时等待表级锁时,就会发生这种情况。如果这种状态是由外部锁请求引起的,并且您没有使用多个正在访问相同MyISAM表的mysqld服务器,您可以使用——skip-external-locking选项禁用外部系统锁。但是,外部锁定在默认情况下是禁用的,所以这个选项很可能没有效果。对于SHOW PROFILE,这个状态意味着线程正在请求锁(而不是等待锁)。 update 线程已经准备好开始更新表。 Updating 线程正在搜索要更新的行,并正在更新它们。 updating main table 服务器正在执行多表更新的第一部分。它只更新第一个表,并保存用于更新其他(引用)表的列和偏移量。 updating reference tables 服务器正在执行多表更新的第二部分,并更新来自其他表的匹配行。 User lock 线程正在请求或等待用GET_LOCK()调用请求的建议锁。对于SHOW PROFILE,这个状态意味着线程正在请求锁(而不是等待锁)。 User sleep 线程调用了一个SLEEP()调用。 Waiting for commit lock 带读锁的FLUSH TABLES正在等待提交锁。 Waiting for global read lock 带读锁的FLUSH TABLES正在等待一个全局读锁,或者正在设置全局read_only系统变量。 Waiting for tables 线程收到一个通知,说表的底层结构发生了变化,它需要重新打开表以获得新的结构。但是,要重新打开表,它必须等待所有其他线程都关闭了相关的表。 Waiting for lock_type lock 服务器正在等待获取THR_LOCK锁或者元数据锁,其中lock_type表示锁的类型。 下面这个状态表示等待THR_LOCK锁: Waiting for table level lock 下面这些状态表示等待元数据锁(metadata lock) Waiting for event metadata lock Waiting for global read lock Waiting for schema metadata lock Waiting for stored function metadata lock Waiting for stored procedure metadata lock Waiting for table metadata lock Waiting for trigger metadata lock


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3