mysql命令show processlist详解

2 篇文章 0 订阅
2 篇文章 0 订阅

说明

show processlist(show full processlist查看信息更多)如果你是super的权限,则显示当前mysql下所有正在运行的线程,否则,只会显示与你当前使用的mysql账户相关联的线程。如果不使用full关键字,那么每条记录中的Info字段中仅显示前100个字符。
如果在执行show processlist出现too many connections的错误。你可以使用super的账户去执行该命令,mysql保留了一个额外的连接,供super特权的账户使用。
除了使用show processlist命令查看,你还可以直接去mysql的系统数据库information_schema中的processlist表中查看到相关记录。
执行后如下(我这里就只截取了一部分信息大家看到效果就好):

mysql> show processlist;
+-------+-------------+-----------------+---------+---------+------+--------------------------+-----------------------------------------------------------------------------------------------------+----------+
| Id    | User        | Host            | db      | Command | Time | State                    | Info                                                                                                | Progress |
+-------+-------------+-----------------+---------+---------+------+--------------------------+-----------------------------------------------------------------------------------------------------+----------+
|     1 | system user |                 | NULL    | Daemon  | NULL | InnoDB purge coordinator | NULL                                                                                                |        0 |
|     2 | system user |                 | NULL    | Daemon  | NULL | InnoDB purge worker      | NULL                                                                                                |        0 |
|     3 | system user |                 | NULL    | Daemon  | NULL | InnoDB purge worker      | NULL                                                                                                |        0 |
|     4 | system user |                 | NULL    | Daemon  | NULL | InnoDB purge worker      | NULL                                                                                                |        0 |
|     5 | system user |                 | NULL    | Daemon  | NULL | InnoDB shutdown handler  | NULL                                                                                                |        0 |
|    40 | com_neal    | localhost:49317 | board   | Sleep   |    0 |                          | NULL                                                                                                |        0 |
| 16798 | com_neal    | localhost:57979 | mes2019 | Sleep   |    0 |                          | NULL                                                                                                |        0 |
| 16810 | com_neal    | localhost:59799 | hermes  | Sleep   |  766 |                          | NULL                                                                                                |        0 |
| 16811 | com_neal    | localhost:59991 | mes2019 | Query   |    0 | Updating                 | update summary_change
        set summary_data = json_array_append(summary_data, '$', json_extract(_ |        0 |
38 rows in set

各个列的含义如下:

1.Id:连接标识符,(你可以通过kill [id] 的命令,将指定id对应的线程杀死,注:谨慎操作!!)
2.User:发起该连接的用户,如果值为system user表示服务器产生的非客户端线程。
3.Host:发起该连接的客户端主机名。
4.db:发起该连接使用的数据库。
5.Command:当前连接正在执行的命令类型,常见的如Sleep,Query,Connect。
6.Time:该连接处于当前执行状态的时间(以秒为单位)
7.State:该连接正在执行的操作状态,大多数的操作执行都是非常快速的。如果该连接在某一状态停留过长时间,则可能存在需要调查的问题。
8.Info:显示正在执行的sql,未执行sql时显示NULL。是判断问题sql(查询耗时的sql)的一个重要依据。

总结

通常情况下使用show processlist查看mysql连接数时,连接数应保持在一个恒定的范围内。
如果你的连接数是一直保持增长的趋势,则可能是因为你的应用服务在和数据库每次建立连接操作后,都没有正常的关闭连接,从而出现大量Sleep连接。
当连接数大于一定的数量后(大于max_connections,可通过show variables like ‘max_connections’;查看)mysql服务再创建连接会出现too many connections的错误。
所以这个时候你应该检查一下你的代码,是否有出现在操作完数据库后,没有关闭连接的情况。现在我们使用的ORM框架如Mybatis,Hibernate在不手动处理事务的情况下,一般都会有自动关闭连接的操作。当然too many connections的错误,也有可能是因为max_connections过小导致的,这个时候你可以适当调整max_connections大小设置方法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值