文档主页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  按线程进行预过滤

29.4.6 按线程进行预过滤

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

要进行历史事件记录,必须满足以下条件:

对于前台线程(由客户端连接产生),threads 表行中 INSTRUMENTEDHISTORY 列的初始值取决于与线程关联的用户帐户是否与 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 列指示是否为匹配的线程启用检测和历史事件记录,但需满足前面描述的其他条件。

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

  • 具有 USER='文字'HOST='文字' 的行。

  • 具有 USER='文字'HOST='%' 的行。

  • 具有 USER='%'HOST='文字' 的行。

  • 包含 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 表最初包含 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 语句更改默认匹配以禁用检测和历史事件收集。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 列。