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
列。