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_history和events_waits_history_long表中的等待事件日志记录需要相应的events_waits_history和events_waits_history_long消费者启用为YES。 -
在
threads表中的HISTORY列必须是YES。 -
日志记录仅发生在
setup_instruments表中启用的仪器中产生的线程事件。
对于前台线程(来自客户端连接),INSTRUMENTED 和 HISTORY 列的初始值在 threads 表行是根据与之关联的用户账户是否与 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 列中,指示是否启用仪器和历史事件日志记录 для matching 线程,subject to the other conditions described previously。
当性能模式检查每个新的前台线程在 setup_actors 中的匹配时,它首先尝试找到更具体的匹配,使用 USER 和 HOST 列 (ROLE 未使用):
-
行
USER='和literal'HOST='。literal' -
行
USER='和literal'HOST='%'。 -
行
USER='%'和HOST='。literal' -
行
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语句添加更多特定的匹配行。
现在,性能模式确定如何设置线程的INSTRUMENTED和HISTORY值,如下所示:
-
如果
从本地主机连接,连接匹配第一个插入的行。 INSTRUMENTED和HISTORY值变为YES。 -
如果
从 hosta.example.com连接,连接匹配第二个插入的行。INSTRUMENTED值变为YES,HISTORY值变为NO。 -
如果
从任何其他主机连接,没有匹配。 INSTRUMENTED和HISTORY值变为NO。 -
如果
从任何主机连接,连接匹配第三个插入的行。 INSTRUMENTED值变为NO,HISTORY值变为YES。 -
对于任何其他连接,具有
HOST和USER设置为'%'的行匹配。这行现在具有ENABLED和HISTORY设置为NO,因此INSTRUMENTED和HISTORY值变为NO。
对setup_actors表的修改仅影响后续创建的前台线程,而不影响现有的线程。要影响现有的线程,修改threads表行的INSTRUMENTED和HISTORY列。