Skip to main content

1.访问进程列表

要确定 MySQL 服务器正在做什么,检查进程列表会很有帮助,该列表指示服务器内执行的线程集当前正在执行的操作。例如:

mysql> SHOW PROCESSLIST\G	#语法报错的话,运行:SHOW PROCESSLIST;
*************************** 1. row ***************************
Id: 5
User: event_scheduler
Host: localhost
db: NULL
Command: Daemon
Time: 2756681
State: Waiting on empty queue
Info: NULL
*************************** 2. row ***************************
Id: 20
User: me
Host: localhost:52943
db: test
Command: Query
Time: 0
State: starting
Info: SHOW PROCESSLIST

可以使用 KILL 语句终止线程。

访问进程列表

进程信息可从以下来源获得:

  • SHOW PROCESSLIST 语句
  • mysqladmin processlist 命令
  • INFORMATION_SCHEMA PROCESSLIST 表
  • 性能模式(Performance Schema)进程列表表
  • 性能模式线程表列的名称具有 PROCESSLIST_ 前缀
  • sys 模式进程列表和会话视图

线程表与 SHOW PROCESSLIST、INFORMATION_SCHEMA PROCESSLIST 和 mysqladmin processlist 进行比较,如下所示:

  • 访问线程表不需要互斥体,并且对服务器性能的影响最小。 其他来源会产生负面性能后果,因为它们需要互斥体。

    SHOW PROCESSLIST 的替代实现基于 Performance Schema processlist 表,与线程表一样,不需要互斥体并且具有更好的性能特征。

  • 线程表显示后台线程,而其他源则不显示。 它还为每个线程提供其他源不提供的附加信息,例如该线程是前台线程还是后台线程,以及与该线程关联的服务器内的位置。 这意味着线程表可用于监视其他源无法监视的线程活动。

  • 可以启用或禁用性能模式线程监视。

由于这些原因,使用其他线程信息源之一执行服务器监视的 DBA 可能希望改为使用线程表进行监视。

sys 架构进程列表视图以更易于访问的格式显示性能架构线程表中的信息。 sys 模式会话视图与 sys 模式进程列表视图类似,显示有关用户会话的信息,但后台进程被过滤掉。

访问进程列表所需的权限

对于大多数进程信息源,如果具有 PROCESS 权限,则可以查看所有线程,甚至是属于其他用户的线程。 否则(没有 PROCESS 权限),非匿名用户可以访问有关自己线程的信息,但不能访问其他用户的线程,并且匿名用户无法访问线程信息。

性能模式线程表还提供线程信息,但表访问使用不同的权限模型。

进程列表条目的内容

每个进程列表条目包含几条信息。 以下列表使用 SHOW PROCESSLIST 输出中的标签描述了它们。 其他过程信息源使用类似的标签。

  • Id 是与线程关联的客户端的连接标识符。

  • User 和 Host 表示与该线程关联的帐户。

  • db 是线程的默认数据库,如果未选择,则为 NULL。

  • 命令和状态指示线程正在做什么。

    大多数状态对应于非常快速的操作。 如果线程保持给定状态很多秒,则可能存在需要调查的问题。

    以下部分列出了可能的命令值和按类别分组的状态值。 其中一些价值观的含义是不言而喻的。 对于其他的,提供了附加描述。

  • time时间表示线程处于当前状态的时间。 在某些情况下,线程的当前时间概念可能会改变:线程可以使用 SET TIMESTAMP = value 更改时间。 对于副本 SQL 线程,该值是上次复制事件的时间戳与副本主机的实时时间之间的秒数。

  • Info 指示线程正在执行的语句,如果没有执行任何语句,则为 NULL。 对于 SHOW PROCESSLIST,该值仅包含语句的前 100 个字符。 要查看完整的语句,请使用 SHOW FULL PROCESSLIST(或查询不同的进程信息源)。