MySQL SHOW PROCESSLIST命令的用法(附带实例)
MySQL 中 SHOW PROCESSLIST 命令的输出结果显示有哪些线程正在运行,不仅可以查看当前所有的连接数,还可以查看当前的连接状态,帮助识别出有问题的查询语句等。
如果是 root 账号,则能看到所有用户的当前连接;如果是其他普通账号,则只能看到自己占用的连接。SHOW PROCESSLIST 只列出前 100 条数据,如果想全部列出,可以使用 SHOW FULL PROCESSLIST 命令。
【实例】使用 SHOW PROCESSLIST 命令输出当前用户的连接信息,SQL 语句如下:
使用另一个命令行登录 MySQL,此时将会有 2 个连接。在第二个登录的命令行下再次输入 SHOW PROCESSLIST,结果如下:
如果是 root 账号,则能看到所有用户的当前连接;如果是其他普通账号,则只能看到自己占用的连接。SHOW PROCESSLIST 只列出前 100 条数据,如果想全部列出,可以使用 SHOW FULL PROCESSLIST 命令。
【实例】使用 SHOW PROCESSLIST 命令输出当前用户的连接信息,SQL 语句如下:
MySQL> SHOW PROCESSLIST; +--+---------------+---------------+----+-------+------+----------------------+----------------+ |Id|User | Host | db |Command| Time | State | Info | +--+---------------+---------------+----+-------+------+----------------------+----------------+ |4 |event_scheduler|localhost |NULL|Daemon |15274 |Waiting on empty queue|NULL | |23|root |localhost:58788|NULL|Query | 0 | starting |SHOW PROCESSLIST| +--+---------------+---------------+----+-------+------+----------------------+----------------+各个列说明如下:
- ID 列:用户登录 MySQL 时,系统分配的是“connection id”。
- 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 语句,是判断问题语句的一个重要依据。
使用另一个命令行登录 MySQL,此时将会有 2 个连接。在第二个登录的命令行下再次输入 SHOW PROCESSLIST,结果如下:
mysql> SHOW PROCESSLIST; +----+------+--------------+--------+---------+--------+---------+----------------+ | Id | User | Host | db | Command | Time | State | Info | +----+------+--------------+--------+---------+--------+---------+----------------+ | 1 | root |localhost:3602|NULL | Sleep | 38 | | NULL | | 2 | root |localhost:3272|NULL | Query | 0 |NULL |show processlist| +----+------+--------------+--------+---------+--------+---------+----------------+可以看到,当前活动用户为已登录的连接 Id 为 2 的用户,正在执行的 Command(操作命令)是 Query(查询),使用的查询命令为 SHOW PROCESSLIST;而连接 Id 为 1 的用户目前没有对数据进行操作,即为 Sleep 操作,而且已经经过了 38 秒。