Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

为了执行历史事件记录,这些条件必须满足:

对于前台线程(来自客户连接),threads 表中的初始 INSTRUMENTEDHISTORY 列的值由与线程关联的用户帐户在setup_actors 表中是否匹配任何行来确定。值来自匹配行中的 ENABLEDHISTORY 列。

对于背景线程,没有关联的用户。INSTRUMENTEDHISTORY 默认为 YESsetup_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 值。这使得仪表盘和历史事件记录可以根据 ENABLEDHISTORY 列值进行选择性应用,以匹配主机、用户或帐户(用户和主机组合):

  • 当最佳匹配是具有 ENABLED=YES 的行时,线程的 INSTRUMENTED 值将变为 YES。当最佳匹配是具有 HISTORY=YES 的行时,线程的 HISTORY 值将变为 YES

  • 当最佳匹配是具有 ENABLED=NO 的行时,线程的 INSTRUMENTED 值将变为 NO。当最佳匹配是具有 HISTORY=NO 的行时,线程的 HISTORY 值将变为 NO

  • 当没有匹配时,线程的 INSTRUMENTEDHISTORY 值将变为 NO

setup_actors表中的ENABLEDHISTORY列可以独立地设置为YESNO。这意味着,您可以单独启用 instrumentation 和历史事件收集。

默认情况下,对于所有新的前台线程,监控和历史事件收集都是启用的,因为setup_actors表最初包含一个行,其中'%'HOSTUSER的值。要执行更有限的匹配,如仅为某些前台线程启用监控,您必须更改这行,因为它匹配任何连接,并添加行以匹配更具体的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 根据以下方式确定如何设置INSTRUMENTEDHISTORY值以便于新连接线程:

  • 如果joe从本地主机连接,该连接匹配第一个插入的行。该线程的INSTRUMENTEDHISTORY值变为YES

  • 如果joehosta.example.com连接,该连接匹配第二个插入的行。该线程的INSTRUMENTED值变为YESHISTORY值变为NO

  • 如果joe从任何其他主机连接,没有匹配。该线程的INSTRUMENTEDHISTORY值变为NO

  • 如果sam从任何主机连接,该连接匹配第三个插入的行。该线程的INSTRUMENTED值变为NOHISTORY值变为YES

  • 对于任何其他连接,该行HOSTUSER设置为'%'匹配。这行现在的ENABLEDHISTORY设置为NO,因此该线程的INSTRUMENTEDHISTORY值变为NO

setup_actors表的修改仅影响创建于修改后面的前台线程,不影响现有线程。要影响现有线程,请修改threads表中的INSTRUMENTEDHISTORY列。