Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

29.4.6 按线程预过滤

The threads 表包含每个服务器线程的一行。每行包含关于线程的信息,并指示是否为其启用了监控。为了让性能模式监控线程,这些条件必须为真:

  • 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_historyevents_waits_history_long 表中的等待事件日志记录需要相应的 events_waits_historyevents_waits_history_long 消费者启用为 YES

  • threads 表中的 HISTORY 列必须是 YES

  • 日志记录仅发生在 setup_instruments 表中启用的仪器中产生的线程事件。

对于前台线程(来自客户端连接),INSTRUMENTEDHISTORY 列的初始值在 threads 表行是根据与之关联的用户账户是否与 setup_actors 表中的某一行匹配确定的。这些值来自匹配的 setup_actors 表行的 ENABLEDHISTORY 列。

对于后台线程,没有关联的用户。INSTRUMENTEDHISTORY 默认为 YES,且不咨询 setup_actors 表。

初始 setup_actors 内容如下所示:

mysql> SELECT * FROM performance_schema.setup_actors;
+------+------+------+---------+---------+
| HOST | USER | ROLE | ENABLED | HISTORY |
+------+------+------+---------+---------+
| %    | %    | %    | YES     | YES     |
+------+------+------+---------+---------+

HOSTUSER 列中,应该包含一个文字主机或用户名,或者 '%' 以匹配任何名称。

ENABLEDHISTORY 列中,指示是否启用仪器和历史事件日志记录 для matching 线程,subject to the other conditions described previously。

当性能模式检查每个新的前台线程在 setup_actors 中的匹配时,它首先尝试找到更具体的匹配,使用 USERHOST 列 (ROLE 未使用):

  • USER='literal'HOST='literal'

  • USER='literal'HOST='%'

  • USER='%'HOST='literal'

  • USER='%'HOST='%'

匹配顺序很重要,因为不同的匹配setup_actors行可以具有不同的USERHOST值。这使得可以根据ENABLEDHISTORY列值,选择性地应用仪表和历史事件日志记录到每个主机、用户或账户(用户和主机组合):

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

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

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

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

默认情况下,对所有新的前台线程启用监控和历史事件收集,因为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语句添加更多特定的匹配行。

现在,性能模式确定如何设置线程的INSTRUMENTEDHISTORY值,如下所示:

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

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

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

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

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

setup_actors表的修改仅影响后续创建的前台线程,而不影响现有的线程。要影响现有的线程,修改threads表行的INSTRUMENTEDHISTORY列。