• show processlist语句返回信息说明


    show processlist会列出一百条,如要列出所有的信息则使用show full processlist.

    各列的含义和用途:
    ID列
    一个标识,你要kill一个语句的时候很有用,用命令杀掉此查询 /*/mysqladmin kill 进程号。
    user列
    显示单前用户,如果不是root,这个命令就只显示你权限范围内的sql语句。
    host列
    显示这个语句是从哪个ip的哪个端口上发出的。用于追踪出问题语句的用户。
    db列
    显示这个进程目前连接的是哪个数据库。
    command列
    显示当前连接的执行的命令,一般就是休眠(sleep),查询(query),连接(connect)。
    time列
    此这个状态持续的时间,单位是秒。
    state列
    显示使用当前连接的sql语句的状态,很重要的列,后续会有所有的状态的描述,请注意,state只是语句执行中的某一个状态,一个 sql语句,以查询为例,可能需要经过copying to tmp table,Sorting result,Sending data等状态才可以完成
    info列
    显示这个sql语句,因为长度有限,所以长的sql语句就显示不全,但是一个判断问题语句的重要依据

    这个命令有个state列,代表状态,各种状态如下:

      · Checking table

      线程正在执行(自动)表格检查。

      · Closing tables

      意味着线程正在刷新更改后的表数据,并正在关闭使用过的表。这应该是一个快速的操作。如果不快,则您应该验证您的磁盘没有充满,并且磁盘没有被超负荷使用。

      · Connect Out

      连接到主服务器上的从属服务器。

      · Copying to tmp table on disk

      临时结果集合大于tmp_table_size。线程把临时表从存储器内部格式改变为磁盘模式,以节约存储器。

      · Creating tmp table

      线程正在创建一个临时表,以保持部分结果。

      · deleting from main table

      服务器正在执行多表删除的第一部分,只从第一个表中删除。

      · deleting from reference tables

      服务器正在执行多表删除的第二部分,从其它表中删除匹配的行。

      · Flushing tables

      线程正在执行FLUSH TABLES,并正在等待所有线程,以关闭表。

      · FULLTEXT initialization

      服务器正在准备执行一个自然语言全文本搜索。

      · Killed

      有人已经向线程发送了一个KILL命令。在下一次检查终止标记时,应放弃。该标记在MySQL的每个大循环中都检查,但是在有些情况下,线程终止只需要较短的时间。如果该线程被其它线程锁定,则只要其它线程接触锁定,终止操作就会生效。

      · Locked

      该查询被其它查询锁定。

      · Sending data

      线程正在为SELECT语句处理行,同时正在向客户端发送数据。

      · Sorting for group

      线程正在进行分类,以满足GROUP BY要求。

      · Sorting for order

      线程正在进行分类,以满足ORDER BY要求。

      · Opening tables

      线程正在试图打开一个表。这应该是非常快的过程,除非打开操作受到阻止。例如,一个ALTER TABLE或一个LOCK TABLE语句可以阻止打开一个表,直到语句完成为止。

      · Removing duplicates

      查询正在使用SELECT DISTINCT。使用时,在早期阶段,MySQL不能优化不同的操作。因此,MySQL要求一个额外的阶段,以便在把结果发送给客户端之前取消所有的复制行。

      · Reopen table

      线程得到一个表锁定,但是在得到锁定后被通知带下方的表结构已更改了。它已经释放了锁定,关闭了表,并试图重新打开它。

      · Repair by sorting

      修复代码正在使用一个分类来创建索引。

      · Repair with keycache

      修复代码正在通过关键缓存一个接一个地使用创建关键字。这比通过分类修复要慢很多。

      · Searching rows for update

      线程正在进行第一阶段,以在更新之前,查找所有匹配的行。如果UPDATE正在更改用于查找相关行的索引,则必须这么做。

      · Sleeping

      线程正在等待客户端,以向它发送一个新语句。

      通常代表资源未释放,如果是通过连接池,sleep状态应该恒定在一定数量范围内

      实战范例:因前端数据输出时(特别是输出到用户终端)未及时关闭数据库连接,导致因网络连接速度产生大量sleep连接,在网速出现异常时,数据库too many connections挂死。

      · System lock

      线程正在等待得到一个用于表的外部系统锁定。如果您没有正在使用多个正在访问同一个表的mysqld服务器,则您可以使用--skip-external-locking选项禁用系统锁定。

      · Upgrading lock

      INSERT DELAYED管理程序正在试图得到一个表锁定,以插入行。

      · Updating

      线程正在搜索行,并正在更新这些行。

      · User Lock

      线程正在等待GET_LOCK()。

      · Waiting for tables

      线程得到一个通知,表的底层结构已经改变,需要重新打开表以得到新的结构。但是,为了能重新打开表,必须等待,直到所有其它的线程已经关闭了正在被质询的表。

      如果其它线程已经对正在被质询的表使用了FLUSH TABLES或以下语句之一:FLUSH TABLES tbl_name, ALTER TABLE, RENAME TABLE, REPAIR TABLE, ANALYZE TABLE或OPTIMIZE TABLE;则会出现通知。

      · waiting for handler insert

      INSERT DELAYED管理程序已经处理了所有处于等待状态的插入,并正在等待新插入。

      多数状态对应于非常快的操作。如果一个线程在这些状态下停留了数秒,则可能是有问题,需要进行调查。

      有一些其它的状态,在前面的清单中没有提及,但是其中有很多状态对于查找服务器中的程序错误是有用的。

      从这里可以看到是不是有表锁死了,是不是有些语句执行了很久,甚至可以通过kill id 语句灭了捣乱的连接。

  • 相关阅读:
    varnish4 配置文件整理
    简单谈谈数据库DML、DDL和DCL的区别
    使用mysqlbinlog恢复数据
    zabbix自定义监控项
    管理python虚拟环境的工具virtuelenvwrapper
    vim的使用
    python的虚拟环境virtualenv
    编译安装python
    Linux基础(二)
    Linux基础(一)
  • 原文地址:https://www.cnblogs.com/tudou1223/p/4446803.html
Copyright © 2020-2023  润新知