show processList 命令内容

问题描述

为了查看已经连接了 MySQL 的都有哪些进程, 我们可以使用命令 show processlist 查看, 查看结果如下

mysql> show processlist;
+----+------+-----------------+----------+---------+------+----------+------------------+
| Id | User | Host            | db       | Command | Time | State    | Info             |
+----+------+-----------------+----------+---------+------+----------+------------------+
| 29 | root | localhost:60378 | NULL     | Sleep   |   10 |          | NULL             |
| 30 | root | localhost:60379 | jdbcdemo | Sleep   |    9 |          | NULL             |
| 31 | root | localhost:60380 | jdbcdemo | Query   |    0 | starting | show processlist |
+----+------+-----------------+----------+---------+------+----------+------------------+
3 rows in set

其中 Command 一列是什么含义, 是根据访问 MySQL 的语句是什么类型的决定的吗? 如果是的话, 执行下面的语句

@Test
public void testUpdate() throws Exception {
    String sql = "UPDATE t_student_day05 SET age = 32 WHERE name = '乔峰'";
    // 1. 加载注册驱动
    Class.forName("com.mysql.jdbc.Driver");
    // 2. 获取连接对象
    Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbcdemo","root","admin");
    // 3. 获取语句对象
    Statement statement = connection.createStatement();
    // 4. 执行语句
    Thread.sleep(5000);
    System.out.println(statement.executeUpdate(sql));
    // 5. 释放对象
    statement.close();
    connection.close();
}

连接到数据库的进程列表如下

+----+------+-----------------+----------+---------+------+----------+------------------+
| Id | User | Host            | db       | Command | Time | State    | Info             |
+----+------+-----------------+----------+---------+------+----------+------------------+
| 29 | root | localhost:60378 | NULL     | Sleep   |  211 |          | NULL             |
| 30 | root | localhost:60379 | jdbcdemo | Sleep   |  210 |          | NULL             |
| 31 | root | localhost:60380 | jdbcdemo | Query   |    0 | starting | show processlist |
| 32 | root | localhost:60412 | jdbcdemo | Sleep   |    4 |          | NULL             |
+----+------+-----------------+----------+---------+------+----------+------------------+
4 rows in set

新增的进程是 Sleep, 也不是 Update, 所以它代表了什么

问题解决

各列的含义和用途

  • id

一个标识,你要 kill 一个语句的时候很有用

  • user

显示单前用户,如果不是 root,这个命令就只显示你权限范围内的 sql 语句

  • host

显示这个语句是从哪个 IP 的哪个端口上发出的。可以用来追踪出问题语句的用户

  • db

显示这个进程目前连接的是哪个数据库

  • command

显示当前连接的执行的命令,一般就是休眠(sleep),查询(query),连接(connect)

  • time

此这个状态持续的时间,单位是秒

  • state

显示使用当前连接的 sql 语句的状态,很重要的列,后续会有所有的状态的描述,请注意,state 只是语句执行中的某一个状态,一个 sql 语句,已查询为例,可能需要经过 copying to tmp tableSorting resultSending data 等状态才可以完成

  • info

显示这个 sql 语句

kill 命令

如果你在一个容量大的表中执行增删改字段或执行一个复杂的 sql 查询导致 mysql 线程挂起.可用此命令查看出是哪些 sql 挂起,用 kill 命令把他 K 掉

kill 命令使用方法

  • kill pid

如上例中我们想kill掉id为207的线程则执行

kill 207

mysql show processlist 命令详解

参考 mysql show processlist 命令详解

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值