8.14.1 访问进程列 table
以下讨论列举了过程信息的来源,查看过程信息所需的特权,并描述了过程列 table 条目的内容。
Process信息来源
可以从以下来源获得过程信息:
-
mysqladmin processlist命令:第 4.5.2 节“ mysqladmin-MySQL 服务器 Management 程序”
-
INFORMATION_SCHEMA
PROCESSLISTtable:第 24.18 节“ INFORMATION_SCHEMA PROCESSLISTtable” -
性能模式threadstable 列的名称带有
PROCESSLIST_
前缀:第 25.12.16.3 节“线程 table” -
sys
模式processlist和session视图:第 26.4.3.22 节,“进程列 table 和 x $ processlist 视图”和第 26.4.3.33 节,“会话和 x $ session 视图”
threadstable 与SHOW PROCESSLIST,INFORMATION_SCHEMA
PROCESSLIST和mysqladmin processlist进行比较,如下所示:
-
访问threadstable 不需要互斥,并且对服务器性能的影响很小。其他来源会对性能造成负面影响,因为它们需要互斥量。
-
threadstable 为其他线程不提供的每个线程提供了其他信息,例如该线程是前台线程还是后台线程,以及与该线程关联的服务器中的位置。这意味着threadstable 可用于监视其他源无法监视的线程活动。
-
您可以启用或禁用性能架构线程监视,如第 25.12.16.3 节“线程 table”中所述。
由于这些原因,使用其他线程信息源之一执行服务器监视的 DBA 可能希望改为使用threadstable 进行监视。
sys
架构processlist视图以更易于访问的格式显示“性能架构threads”table 中的信息。 sys
模式session视图提供有关用户会话的信息,例如sys
模式processlist视图,但过滤掉了后台进程。
访问进程列 table 所需的特权
对于大多数过程信息源,如果您具有PROCESS特权,则可以查看所有线程,甚至包括属于其他用户的那些线程。否则(没有PROCESS特权),非匿名用户有权访问有关其自己线程的信息,而其他用户则不能访问线程,并且匿名用户无权访问线程信息。
Performance Schema threadstable 还提供线程信息,但 table 访问使用不同的特权模型。参见第 25.12.16.3 节“线程 table”。
流程列 table 条目的内容
每个进程列 table 条目均包含几条信息。以下列 table 使用SHOW PROCESSLIST输出中的标签描述了它们。其他过程信息源使用类似的标签。
-
Id
是与线程关联的 Client 端的连接标识符。 -
User
和Host
table 示与线程关联的帐户。 -
db
是该线程的默认数据库,或者NULL
(如果未选择任何数据库)。 -
Command
和State
指示线程在做什么。
大多数状态对应于非常快速的操作。如果线程在给定状态下停留许多秒钟,则可能存在需要调查的问题。
以下各节列出了按类别分组的可能的Command
值和State
值。其中一些值的含义不言而喻。对于其他人,提供了附加描述。
Note
检查进程列 table 信息的应用程序应注意,命令和状态可能会更改。
-
Time
指示线程处于其当前状态已有多长时间。在某些情况下,线程的当前时间概念可能会更改:线程可以使用SET TIMESTAMP =值更改时间。对于副本 SQL 线程,该值是最后一个复制事件的时间戳与副本主机的实时之间的秒数。参见第 16.2.2 节“复制实现的详细信息”。 -
Info
table 示线程正在执行的语句,或者NULL
如果它不执行任何语句。对于SHOW PROCESSLIST,此值仅包含语句的前 100 个字符。要查看完整的语句,请使用显示完整的程序 Lists(或查询不同的过程信息源)。