threads
表包含每个服务器线程的一行。每行包含有关线程的信息,并指示是否为其启用了监控。为了让 Performance Schema 监控线程,必须满足以下条件:
setup_consumers
表中的thread_instrumentation
消费者必须为YES
。threads.INSTRUMENTED
列必须为YES
。仅对从
setup_instruments
表中启用的检测点生成的线程事件进行监控。
threads
表还指示每个服务器线程是否执行历史事件记录。这包括等待、阶段、语句和事务事件,并影响对以下表的记录:
events_waits_history
events_waits_history_long
events_stages_history
events_stages_history_long
events_statements_history
events_statements_history_long
events_transactions_history
events_transactions_history_long
要进行历史事件记录,必须满足以下条件:
setup_consumers
表中相应的与历史记录相关的消费者必须启用。例如,events_waits_history
和events_waits_history_long
表中的等待事件记录需要相应的events_waits_history
和events_waits_history_long
消费者为YES
。threads.HISTORY
列必须为YES
。仅对从
setup_instruments
表中启用的检测点生成的线程事件进行记录。
对于前台线程(由客户端连接产生),threads
表行中 INSTRUMENTED
和 HISTORY
列的初始值由与线程关联的用户帐户是否与 setup_actors
表中的任何行匹配来确定。这些值来自匹配的 setup_actors
表行的 ENABLED
和 HISTORY
列。
对于后台线程,没有关联的用户。INSTRUMENTED
和 HISTORY
默认值为 YES
,并且不查询 setup_actors
。
初始 setup_actors
内容如下所示:
mysql> SELECT * FROM performance_schema.setup_actors;
+------+------+------+---------+---------+
| HOST | USER | ROLE | ENABLED | HISTORY |
+------+------+------+---------+---------+
| % | % | % | YES | YES |
+------+------+------+---------+---------+
HOST
和 USER
列应包含文字主机名或用户名,或者使用 '%'
匹配任何名称。
ENABLED
和 HISTORY
列指示是否为匹配的线程启用检测和历史事件记录,但需满足前面所述的其他条件。
当 Performance Schema 在 setup_actors
中检查每个新前台线程的匹配项时,它会尝试首先使用 USER
和 HOST
列(ROLE
未使用)查找更具体的匹配项:
包含
USER='
和文字
'HOST='
的行。文字
'包含
USER='
和文字
'HOST='%'
的行。包含
USER='%'
和HOST='
的行。文字
'包含
USER='%'
和HOST='%'
的行。
匹配发生的顺序很重要,因为不同的匹配 setup_actors
行可以具有不同的 USER
和 HOST
值。这使得可以根据 ENABLED
和 HISTORY
列值,选择性地对每个主机、用户或帐户(用户和主机的组合)应用检测和历史事件记录。
当最佳匹配是
ENABLED=YES
的行时,线程的INSTRUMENTED
值将变为YES
。当最佳匹配是HISTORY=YES
的行时,线程的HISTORY
值将变为YES
。当最佳匹配是
ENABLED=NO
的行时,线程的INSTRUMENTED
值将变为NO
。当最佳匹配是HISTORY=NO
的行时,线程的HISTORY
值将变为NO
。当未找到匹配项时,线程的
INSTRUMENTED
和HISTORY
值将变为NO
。
setup_actors
行中的 ENABLED
和 HISTORY
列可以设置为 YES
或 NO
,彼此独立。这意味着您可以独立于是否收集历史事件来启用检测。
默认情况下,将为所有新的前台线程启用监视和历史事件收集,因为 setup_actors
表最初包含一行,其中 HOST
和 USER
都为 '%'
。要执行更有限的匹配,例如仅对某些前台线程启用监视,则必须更改此行,因为它匹配任何连接,并为更具体的 HOST
/USER
组合添加行。
假设您修改 setup_actors
如下
UPDATE performance_schema.setup_actors
SET ENABLED = 'NO', HISTORY = 'NO'
WHERE HOST = '%' AND USER = '%';
INSERT INTO performance_schema.setup_actors
(HOST,USER,ROLE,ENABLED,HISTORY)
VALUES('localhost','joe','%','YES','YES');
INSERT INTO performance_schema.setup_actors
(HOST,USER,ROLE,ENABLED,HISTORY)
VALUES('hosta.example.com','joe','%','YES','NO');
INSERT INTO performance_schema.setup_actors
(HOST,USER,ROLE,ENABLED,HISTORY)
VALUES('%','sam','%','NO','YES');
UPDATE
语句将更改默认匹配以禁用检测和历史事件收集。INSERT
语句为更具体的匹配添加行。
现在,Performance Schema 确定如何为新的连接线程设置 INSTRUMENTED
和 HISTORY
值,如下所示
如果
joe
从本地主机连接,则连接与插入的第一行匹配。线程的INSTRUMENTED
和HISTORY
值将变为YES
。如果
joe
从hosta.example.com
连接,则连接与插入的第二行匹配。线程的INSTRUMENTED
值将变为YES
,而HISTORY
值将变为NO
。如果
joe
从任何其他主机连接,则没有匹配项。线程的INSTRUMENTED
和HISTORY
值将变为NO
。如果
sam
从任何主机连接,则连接与插入的第三行匹配。线程的INSTRUMENTED
值将变为NO
,而HISTORY
值将变为YES
。对于任何其他连接,
HOST
和USER
设置为'%'
的行将匹配。此行现在的ENABLED
和HISTORY
设置为NO
,因此线程的INSTRUMENTED
和HISTORY
值将变为NO
。
对 setup_actors
表的修改仅影响修改后创建的前台线程,而不影响现有线程。要影响现有线程,请修改 threads
表行的 INSTRUMENTED
和 HISTORY
列。