mysql show full processlist;_MySQL分析数据运行状态利器【show full processlist】

今天的主角是:

SHOW [FULL] PROCESSLIST

show full processlist;

官方文档的描述如下:

SHOW PROCESSLIST shows you which threads are running. You can also get this information from the

INFORMATION_SCHEMA PROCESSLIST table or the mysqladmin processlist command. If you have

the PROCESS privilege, you can see all threads. Otherwise, you can see only your own threads (that is,

threads associated with the MySQL account that you are using). If you do not use the FULL keyword, only

the first 100 characters of each statement are shown in the Info field.

意思就是说上述指令是用来查看那些线程正在运行。

你也可以得到这些信息,从INFORMATION_SCHEMA PROCESSLIST这个表,或者通过mysqladmin processlist指令。

如果你有PROCESS权限,你可以查看所有的线程。否则,你只能查看你自己当前账户的线程。

如果你没有使用FULL关键字,你只能查看每个记录中Info字段里面的前100个字符。【加上FULL,即可在info列中显示完整的sql语句】

方式1:具体操作:

48304ba5e6f9fe08f3fa1abda7d326ab.png

mysql> show processlist;

ERROR 2006 (HY000): MySQL server has gone away

No connection. Trying to reconnect...

Connection id: 46661

Current database: advsql

+-------+-----------+-------------------+--------+---------+-------+-------+------------------+

| Id | User | Host | db | Command | Time | State | Info |

+-------+-----------+-------------------+--------+---------+-------+-------+------------------+

| 46586 | tkcssuser | 10.90.13.61:55838 | tkcss | Sleep | 42 | | NULL |

| 46660 | tkcssuser | 10.90.13.8:52008 | tkcss | Sleep | 11041 | | NULL |

| 46661 | root | localhost | advsql | Query | 0 | init | show processlist |

+-------+-----------+-------------------+--------+---------+-------+-------+------------------+

3 rows in set (0.01 sec)

48304ba5e6f9fe08f3fa1abda7d326ab.png

方式2:通过查询information_schema的processlist表:

48304ba5e6f9fe08f3fa1abda7d326ab.png

mysql> select * from information_schema.processlist;

+-------+-----------+-------------------+--------+---------+-------+-----------+----------------------------------------------+

| ID | USER | HOST | DB | COMMAND | TIME | STATE | INFO |

+-------+-----------+-------------------+--------+---------+-------+-----------+----------------------------------------------+

| 46661 | root | localhost | advsql | Query | 0 | executing | select * from information_schema.processlist |

| 46586 | tkcssuser | 10.90.13.61:55838 | tkcss | Sleep | 279 | | NULL |

| 46660 | tkcssuser | 10.90.13.8:52008 | tkcss | Sleep | 11578 | | NULL |

+-------+-----------+-------------------+--------+---------+-------+-----------+----------------------------------------------+

3 rows in set (0.00 sec)

48304ba5e6f9fe08f3fa1abda7d326ab.png

方式3:mysqladmin processlist指令:

48304ba5e6f9fe08f3fa1abda7d326ab.png

[root@localhost ~]# mysqladmin processlist -u root -p

Enter password:

+-------+-----------+-------------------+--------+---------+-------+-------+------------------+

| Id | User | Host | db | Command | Time | State | Info |

+-------+-----------+-------------------+--------+---------+-------+-------+------------------+

| 46586 | tkcssuser | 10.90.13.61:55838 | tkcss | Sleep | 138 | | |

| 46660 | tkcssuser | 10.90.13.8:52008 | tkcss | Sleep | 12037 | | |

| 46661 | root | localhost | advsql | Sleep | 459 | | |

| 46662 | root | localhost | | Query | 0 | init | show processlist |

+-------+-----------+-------------------+--------+---------+-------+-------+------------------+

48304ba5e6f9fe08f3fa1abda7d326ab.png

关于这个命令的价值,官方的介绍如下:

The SHOW PROCESSLIST statement is very useful if you get the “too many connections” error message

and want to find out what is going on. MySQL reserves one extra connection to be used by accounts that

have the SUPER privilege, to ensure that administrators should always be able to connect and check the

system (assuming that you are not giving this privilege to all your users).

Threads can be killed with the KILL statement.

运行的线程,可以通过KILL指令将其杀掉。这个信息非常重要。

这里,可以看到SHOW PROCESSLIST指令里面的输出内容,有几个字段,下面给予解释说明,只有搞清楚了这些字段的含义,才对我们的实际项目问题分析才有价值:

Id:

The connection identifier. This is the same type of value displayed in the ID column of the

INFORMATION_SCHEMA.PROCESSLIST table, the PROCESSLIST_ID column of the Performance

Schema threads table, and returned by the CONNECTION_ID() function.

User:

The MySQL user who issued the statement. If this is system user, it refers to a nonclient thread

spawned by the server to handle tasks internally. This could be the I/O or SQL thread used on replication

slaves or a delayed-row handler. unauthenticated user refers to a thread that has become

associated with a client connection but for which authentication of the client user has not yet been done.

event_scheduler refers to the thread that monitors scheduled events. For system user, there is no

host specified in the Host column.

Host:

The host name of the client issuing the statement (except for system user where there is no host).

SHOW PROCESSLIST reports the host name for TCP/IP connections in host_name:client_port

format to make it easier to determine which client is doing what.

db:

The default database, if one is selected, otherwise NULL.

Command:

The type of command the thread is executing. 例如上面的例子中,Sleep,或者Query

Time:

The time in seconds that the thread has been in its current state. For a slave SQL thread, the value is

the number of seconds between the timestamp of the last replicated event and the real time of the slave

machine.线程处于当前状态的时间,以秒为单位

State:

Most states correspond to very quick operations. If a thread stays in a given state for many seconds,

there might be a problem that needs to be investigated.

An action, event, or state that indicates what the thread is doing.

Info:

The statement the thread is executing, or NULL if it is not executing any statement. The statement might

be the one sent to the server, or an innermost statement if the statement executes other statements. For

example, if a CALL statement executes a stored procedure that is executing a SELECT statement, the

Info value shows the SELECT statement.线程正在执行的语句,如果没有执行任何语句,则为NULL。

上述信息的解释当中,对于我们分析问题,尤为重要的是Id,Host,Time,State以及Info字段。这几个当中,第一眼能让我们看出问题的是Time,State和Info字段。我们若想看得更详细的Info字段,请用SHOW FULL PROCESSLIST指令。注意前面的命令解释内容。

我们线上的一个问题,就是加索引加不上去,我们将应用停掉还是加不上去,通过SHOW PROCESSLIST指令,发现有好多线程Command处于Query状态。最长的Time字段显示达到230172seconds,换算成小时,都63个小时,见鬼啊!!!!(这个地方有疑问)

为了解决问题,立即调用KILL指令,前面介绍时提到的。

KILL [CONNECTION | QUERY] processlist_id

官方介绍:

Each connection to mysqld runs in a separate thread. You can kill a thread with the KILL

processlist_id statement.

参数中的processlist_id,来源于show processlist结果列表中的id字段。

kill指令支持两个可选参数,CONNECTION以及QUERY。

• KILL CONNECTION is the same as KILL with no modifier: It terminates the connection associated with

the given processlist_id, after terminating any statement the connection is executing.

• KILL QUERY terminates the statement the connection is currently executing, but leaves the connection

itself intact.

很简单,connection选项,kill的时候,将连接也断掉,而query选项,kill的过程只是将该指令杀掉,连接还保持。 kill指令不指定connection或者query选项时,默认是connection。

到此,今天要介绍的MySQL的查看数据运行连接状态的内容到此结束。

===========================================================================

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值