该threads
表包含每个服务器线程的一行。每行包含有关线程的信息,并指示是否为其启用监控。对于监视线程的性能模式,这些事情必须是真实的:
表中的
thread_instrumentation
消费者setup_consumers
必须是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
比如andevents_waits_history_long
表 中的wait事件记录 需要对应的events_waits_history
andevents_waits_history_long
消费者是YES
.该
threads.HISTORY
列必须是YES
.仅对表中启用的仪器产生的线程事件进行记录
setup_instruments
。
对于前台线程(由客户端连接产生),表行中的INSTRUMENTED
和
HISTORY
列
的初始值threads
取决于与线程关联的用户帐户是否与表中的任何行匹配setup_actors
。这些值来自匹配
表行
的ENABLED
和
列。HISTORY
setup_actors
对于后台线程,没有关联的用户。
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
当 Performance Schema 检查每个新前台线程的匹配项时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
。
行中的ENABLED
和HISTORY
列setup_actors
可以相互设置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
语句为更具体的匹配项添加行。
现在 Performance Schema 确定如何为新连接线程设置
INSTRUMENTED
和HISTORY
值,如下所示:
如果
joe
从本地主机连接,连接匹配第一个插入的行。线程的INSTRUMENTED
和HISTORY
值变为YES
。如果
joe
从 连接hosta.example.com
,则连接匹配第二个插入的行。INSTRUMENTED
线程的值变为值 变为YES
。HISTORY
NO
如果
joe
从任何其他主机连接,则没有匹配项。线程的INSTRUMENTED
和HISTORY
值变为NO
。如果
sam
从任何主机连接,连接匹配第三个插入的行。INSTRUMENTED
线程 的 值变为值 变为NO
。HISTORY
YES
对于任何其他连接,具有
HOST
和USER
设置为'%'
匹配的行。该行现在已 设置为,因此线程的 和ENABLED
值变为 。HISTORY
NO
INSTRUMENTED
HISTORY
NO
对setup_actors
表的修改仅影响修改后创建的前台线程,而不影响现有线程。要影响现有线程,请修改表行的INSTRUMENTED
和
HISTORY
列
threads
。