29.4.6 按线程预过滤
The 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
表中是否匹配任何行来确定。值来自匹配行中的 ENABLED
和 HISTORY
列。
对于背景线程,没有关联的用户。INSTRUMENTED
和 HISTORY
默认为 YES
,setup_actors
不被 consulted。
初始setup_actors
内容如下:
mysql> SELECT * FROM performance_schema.setup_actors;
+------+------+------+---------+---------+
| HOST | USER | ROLE | ENABLED | HISTORY |
+------+------+------+---------+---------+
| % | % | % | YES | YES |
+------+------+------+---------+---------+
HOST 和 USER 列应包含字面值的主机或用户名,或者 '%'
以匹配任何名称。
ENABLED 和 HISTORY 列指示是否启用仪表盘和历史事件记录,以匹配线程,subject to the other conditions described previously。
当 Performance Schema 检查每个新前台线程在 setup_actors
中的匹配时,它首先尝试找到更具体的匹配,使用 HOST 和 USER 列(ROLE 是 unused):
-
具有
USER='
和literal
'HOST='
的行。literal
' -
具有
USER='
和literal
'HOST='%'
的行。 -
具有
USER='%'
和HOST='
的行。literal
' -
具有
USER='%'
和HOST='%'
的行。
匹配的顺序很重要,因为不同的匹配setup_actors
行可以具有不同的 HOST 和 USER 值。这使得仪表盘和历史事件记录可以根据 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
。这意味着,您可以单独启用 instrumentation 和历史事件收集。
默认情况下,对于所有新的前台线程,监控和历史事件收集都是启用的,因为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 语句更改了默认匹配以禁用 instrumentation 和历史事件收集。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
列。