threads表
该threads
表为每个服务器线程包含一行。每行包含有关线程的信息,并指示是否为该线程启用了监视和历史事件日志记录:
mysql>SELECT *FROM performance_schema.threads\G *************************** 1. row*************************** THREAD_ID: 1 NAME: thread/sql/main TYPE: BACKGROUND PROCESSLIST_ID: NULL PROCESSLIST_USER: NULL PROCESSLIST_HOST: NULL PROCESSLIST_DB: NULL PROCESSLIST_COMMAND: NULL PROCESSLIST_TIME: 80284 PROCESSLIST_STATE: NULL PROCESSLIST_INFO: NULL PARENT_THREAD_ID: NULL ROLE: NULL INSTRUMENTED: YES HISTORY: YES CONNECTION_TYPE: NULL THREAD_OS_ID: 489803 RESOURCE_GROUP: SYS_default ... *************************** 4. row*************************** THREAD_ID: 51 NAME: thread/sql/one_connection TYPE: FOREGROUND PROCESSLIST_ID: 34 PROCESSLIST_USER: isabella PROCESSLIST_HOST: localhost PROCESSLIST_DB: performance_schema PROCESSLIST_COMMAND: Query PROCESSLIST_TIME: 0 PROCESSLIST_STATE: Sending data PROCESSLIST_INFO: SELECT* FROM performance_schema.threads PARENT_THREAD_ID: 1 ROLE: NULL INSTRUMENTED: YES HISTORY: YES CONNECTION_TYPE: SSL/TLS THREAD_OS_ID: 755399 RESOURCE_GROUP: USR_default ...
当性能架构初始化时,它将threads
根据当时存在的线程填充表。此后,每次服务器创建线程时都会添加一个新行。
新线程的INSTRUMENTED
和HISTORY
列值由setup_actors
表的内容确定。有关如何使用setup_actors
表控制这些列的信息,请参见“通过线程进行预过滤”。
threads
当线程结束时,会从表中删除行。对于与客户端会话相关联的线程,会话结束时会进行删除。如果客户端启用了自动重新连接,并且会话在断开连接后重新连接,则该会话将与threads
表中具有不同PROCESSLIST_ID
值的新行相关联。最初的INSTRUMENTED
和HISTORY
新线程值可能与原来的线程的不同:本setup_actors
表可在此期间发生了变化,如果INSTRUMENTED
还是HISTORY
在初始化行之后更改了原始线程的值,该更改不会继续到新线程。
threads
名称以前缀为前缀的表列PROCESSLIST_
提供的信息类似于INFORMATION_SCHEMA.PROCESSLIST
表或SHOW PROCESSLIST
语句中可用的信息。因此,所有三个源均提供线程监视信息。使用threads
方式在以下方面与其他两个来源的使用方式不同:
- 访问
threads
不需要互斥,并且对服务器性能的影响最小。INFORMATION_SCHEMA.PROCESSLIST
并且SHOW PROCESSLIST
由于它们需要互斥量而对性能造成负面影响。 threads
提供每个线程的其他信息,例如它是前台线程还是后台线程,以及与该线程关联的服务器中的位置。threads
提供有关后台线程的信息,因此可用于监视其他线程信息源无法监视的活动。- 您可以启用或禁用线程监视(即,是否检测到线程执行的事件)和历史事件日志记录。要控制新前台线程的初始值
INSTRUMENTED
和HISTORY
值,请使用该setup_actors
表。要控制现有线程的这些方面,请设置表行的INSTRUMENTED
和HISTORY
列threads
。(有关在何种条件下螺纹监测和历史事件记录发生,看到的说明的详细信息INSTRUMENTED
和HISTORY
列。)
由于这些原因,使用INFORMATION_SCHEMA.PROCESSLIST
或SHOW PROCESSLIST
希望使用该threads
表进行监视的DBA 可能会使用该表进行监视。
注意对于
INFORMATION_SCHEMA.PROCESSLIST
和SHOW PROCESSLIST
,仅当当前用户具有PROCESS
特权时,才会显示有关其他用户的线程的信息。threads
桌子不是这样。所有行均显示给具有SELECT
该表特权的任何用户。不应该看到其他用户线程的用户不应获得该特权。
该threads
表包含以下列:
THREAD_ID
唯一的线程标识符。
NAME
与服务器中的线程检测代码关联的名称。例如,
thread/sql/one_connection
与代码中负责处理用户连接的线程功能相对应,thread/sql/main
代表main()
服务器的功能。TYPE
线程类型
FOREGROUND
或BACKGROUND
。用户连接线程是前台线程。与内部服务器活动关联的线程是后台线程。示例包括内部InnoDB
线程,将信息发送到从属服务器的“ binlog dump ”线程以及从属I / O和SQL线程。PROCESSLIST_ID
对于
INFORMATION_SCHEMA.PROCESSLIST
表中显示的线程,此值ID
与该表的列中显示的值相同。它也是在输出Id
列中显示的值SHOW PROCESSLIST
,以及CONNECTION_ID()
将在该线程内返回的值。对于后台线程(与用户连接无关的线程),
PROCESSLIST_ID
为NULL
,因此值不是唯一的。PROCESSLIST_USER
与前台线程关联的用户,
NULL
用于后台线程。PROCESSLIST_HOST
与前台线程关联的客户端的主机名,
NULL
用于后台线程。不同于
HOST
所述的列INFORMATION_SCHEMA
PROCESSLIST
表或Host
列SHOW PROCESSLIST
输出,所述PROCESSLIST_HOST
列不包括用于TCP / IP连接的端口号。要从性能架构中获取此信息,请启用套接字检测(默认情况下未启用)并检查socket_instances
表:mysql>
SELECT NAME , ENABLED, TIMEDFROM performance_schema.setup_instrumentsWHERE NAME LIKE 'wait/io/socket%'; +---------------------------------------- +--------- +------- + | NAME | ENABLED | TIMED | +---------------------------------------- +--------- +------- + | wait/io/socket/sql/server_tcpip_socket | NO | NO | | wait/io/socket/sql/server_unix_socket | NO | NO | | wait/io/socket/sql/client_connection | NO | NO | +---------------------------------------- +--------- +------- + 3 rows in set (0.01 sec) mysql>UPDATE performance_schema.setup_instrumentsSET ENABLED='YES'WHERE NAME LIKE 'wait/io/socket%'; Query OK, 3 rows affected (0.00 sec) Rows matched: 3 Changed: 3 Warnings: 0 mysql>SELECT *FROM performance_schema.socket_instances\G *************************** 1. row*************************** EVENT_NAME: wait/io/socket/sql/client_connection OBJECT_INSTANCE_BEGIN: 140612577298432 THREAD_ID: 31 SOCKET_ID: 53 IP:::ffff:127.0.0.1 PORT: 55642 STATE: ACTIVE ...PROCESSLIST_DB
线程的默认数据库,
NULL
如果没有。PROCESSLIST_COMMAND
对于前台线程,该线程代表客户端执行的命令类型,或者
Sleep
会话处于空闲状态。有关线程命令的描述,请参见“检查线程信息”。该列的值对应于客户端/服务器协议的命令和状态变量。请参见“服务器状态变量”COM_xxx
Com_xxx
后台线程不代表客户端执行命令,因此此列可能为
NULL
。PROCESSLIST_TIME
线程处于其当前状态的时间(以秒为单位)。
PROCESSLIST_STATE
指示线程正在执行的操作,事件或状态。有关
PROCESSLIST_STATE
值的描述,请参见“检查线程信息”。如果值为ifNULL
,则该线程可能对应于一个空闲的客户端会话,或者该线程正在执行的工作没有阶段性。大多数状态对应于非常快速的操作。如果线程在给定状态下停留许多秒钟,则可能存在值得研究的问题。
PROCESSLIST_INFO
线程正在执行的语句,或者
NULL
未执行任何语句的语句。该语句可能是发送到服务器的那条语句,或者是最内部的语句(如果该语句执行其他语句)。例如,如果一条CALL
语句执行了正在执行一条SELECT
语句的存储过程,则该PROCESSLIST_INFO
值将显示该SELECT
语句。PARENT_THREAD_ID
如果此线程是子线程(由另一个线程生成),则这是生成线程的
THREAD_ID
值。ROLE
没用过。
INSTRUMENTED
是否检测线程执行的事件。值为
YES
或NO
。对于前台线程,初始
INSTRUMENTED
值由与该线程关联的用户帐户是否与setup_actors
表中的任何行匹配来确定。匹配基于PROCESSLIST_USER
和PROCESSLIST_HOST
列的值。如果线程产生了一个子线程,则为该子线程
threads
创建的表行将再次发生匹配。- 对于后台线程,
INSTRUMENTED
就是YES
默认。setup_actors
未咨询,因为没有关联用户使用后台线程。 - 对于任何线程,
INSTRUMENTED
可以在线程的生存期内更改其值。
为了监视由线程执行的事件的发生,这些情况必须为真:
- 表中的
thread_instrumentation
使用者setup_consumers
必须为YES
。 - 该
threads.INSTRUMENTED
列必须为YES
。 - 监测只发生于从具有仪器产生的那些线程事件
ENABLED
列设置为YES
在setup_instruments
表中。
HISTORY
是否记录线程的历史事件。值为
YES
或NO
。对于前台线程,初始
HISTORY
值由与该线程关联的用户帐户是否与setup_actors
表中的任何行匹配来确定。匹配基于PROCESSLIST_USER
和PROCESSLIST_HOST
列的值。如果线程产生了一个子线程,则为该子线程
threads
创建的表行将再次发生匹配。- 对于后台线程,
HISTORY
就是YES
默认。setup_actors
未咨询,因为没有关联用户使用后台线程。 - 对于任何线程,
HISTORY
可以在线程的生存期内更改其值。
为了使线程发生历史事件日志,这些条件必须为真:
setup_consumers
必须在表中启用与历史记录相关的适当使用者。例如,在events_waits_history
和events_waits_history_long
表中的等待事件日志记录要求相应的events_waits_history
和events_waits_history_long
使用者为YES
。- 该
threads.HISTORY
列必须为YES
。 - 仅对在表中将
ENABLED
列设置为的仪器产生的那些线程事件进行记录。YES
setup_instruments
CONNECTION_TYPE
用于建立连接或
NULL
后台线程的协议。允许的值为TCP/IP
(未加密建立的TCP / IP连接),SSL/TLS
(通过加密建立的TCP / IP连接),Socket
(Unix套接字文件连接),Named Pipe
(Windows命名管道连接)和Shared Memory
(Windows共享内存连接)。THREAD_OS_ID
基础操作系统定义的线程或任务标识符(如果有):
- 当MySQL线程在其生命周期内与同一操作系统线程关联时,
THREAD_OS_ID
包含操作系统线程ID。 - 当MySQL线程在其生命周期内未与同一操作系统线程关联时,
THREAD_OS_ID
包含NULL
。使用线程池插件时,这通常用于用户会话(请参见“ MySQL Enterprise线程池”)。
对于Windows,
THREAD_OS_ID
对应于Process Explorer(https://technet.microsoft.com/zh-cn/sysinternals/bb896653.aspx)中可见的线程ID 。对于Linux,
THREAD_OS_ID
对应于该gettid()
函数的值。例如,使用perf或ps -L命令或在proc
文件系统()中公开此值。欲了解更多信息,请参阅,和手册页。/proc/[pid]/task/[tid]
perf-stat(1)
ps(1)
proc(5)
- 当MySQL线程在其生命周期内与同一操作系统线程关联时,
RESOURCE_GROUP
资源组标签。该值是
NULL
当前平台或服务器配置上不支持资源组的情况(请参阅资源组限制)。
该threads
表具有以下索引:
- (
THREAD_ID
)上的主键 - 在(
NAME
)上的索引 - 在(
PROCESSLIST_ID
)上的索引 - 在(
PROCESSLIST_USER
,PROCESSLIST_HOST
)上的索引 - 在(
PROCESSLIST_HOST
)上的索引 - 在(
THREAD_OS_ID
)上的索引 - 在(
RESOURCE_GROUP
)上的索引
TRUNCATE TABLE
不允许用于该threads
表。