The setup_consumers
表列出了可用的消费者类型和哪些是启用的:
mysql> SELECT * FROM performance_schema.setup_consumers;
+----------------------------------+---------+
| NAME | ENABLED |
+----------------------------------+---------+
| events_stages_current | NO |
| events_stages_history | NO |
| events_stages_history_long | NO |
| events_statements_cpu | NO |
| events_statements_current | YES |
| events_statements_history | YES |
| events_statements_history_long | NO |
| events_transactions_current | YES |
| events_transactions_history | YES |
| events_transactions_history_long | NO |
| events_waits_current | NO |
| events_waits_history | NO |
| events_waits_history_long | NO |
| global_instrumentation | YES |
| thread_instrumentation | YES |
| statements_digest | YES |
+----------------------------------+---------+
修改 setup_consumers
表以影响消费者阶段的预过滤,并确定事件发送到的目标。要启用或禁用消费者,将其 ENABLED
值设置为 YES
或 NO
。
对 setup_consumers
表的修改立即影响监控。
如果禁用了消费者,服务器不会花费时间维护该消费者的目标。例如,如果您不关心历史事件信息,可以禁用历史消费者:
UPDATE performance_schema.setup_consumers
SET ENABLED = 'NO'
WHERE NAME LIKE '%history%';
setup_consumers
表中的消费者设置形成了从高级别到低级别的层次结构。以下原则适用:
-
除非性能模式检查消费者并且消费者启用,否则与消费者关联的目标不会收到事件。
-
只有当所有依赖的消费者(如果有)启用时,消费者才会被检查。
-
如果消费者未被检查,或者被检查但禁用,依赖它的其他消费者将不会被检查。
-
依赖消费者可能有自己的依赖消费者。
-
如果事件不会被发送到任何目标,性能模式将不会生成它。
以下列表描述了可用的消费者值。有关讨论一些代表性消费者配置及其对仪器的影响,请参阅 第 29.4.8 节,“示例消费者配置”。
-
global_instrumentation
是最高级别的消费者。如果global_instrumentation
是NO
,它禁用了全局仪器。如果global_instrumentation
是YES
,性能模式维护全局状态信息,并检查thread_instrumentation
消费者。 -
thread_instrumentation
只有在global_instrumentation
是YES
时才被检查。否则,如果thread_instrumentation
是NO
,它禁用了线程特定的仪器,并忽略了所有较低级别的设置。没有线程特定的信息被维护,并且没有个体事件被收集在当前事件或事件历史表中。如果thread_instrumentation
是YES
,性能模式维护线程特定的信息,并检查events_
消费者。xxx
_current
这些消费者需要同时 global_instrumentation
和 thread_instrumentation
为 YES
,否则它们不会被检查。如果被检查,它们的行为如下:
-
events_waits_current
,如果NO
,则禁用events_waits_current
表中的单个等待事件收集。如果YES
,则启用等待事件收集,并且性能模式检查events_waits_history
和events_waits_history_long
消费者。 -
events_waits_history
如果event_waits_current
是NO
,则不检查。否则,events_waits_history
的值为NO
或YES
禁用或启用events_waits_history
表中的等待事件收集。 -
events_waits_history_long
如果event_waits_current
是NO
,则不检查。否则,events_waits_history_long
的值为NO
或YES
禁用或启用events_waits_history_long
表中的等待事件收集。
这些消费者需要同时 global_instrumentation
和 thread_instrumentation
为 YES
,否则它们不会被检查。如果被检查,它们的行为如下:
-
events_stages_current
,如果NO
,禁用events_stages_current
表中的单个阶段事件收集。如果YES
,则启用阶段事件收集,并且性能模式检查events_stages_history
和events_stages_history_long
消费者。 -
events_stages_history
如果event_stages_current
是NO
,则不检查。否则,events_stages_history
的值为NO
或YES
禁用或启用events_stages_history
表中的阶段事件收集。 -
events_stages_history_long
如果event_stages_current
是NO
,则不检查。否则,events_stages_history_long
的值为NO
或YES
禁用或启用events_stages_history_long
表中的阶段事件收集。
这些消费者需要同时 global_instrumentation
和 thread_instrumentation
为 YES
,否则它们不会被检查。如果被检查,它们的行为如下:
-
events_statements_cpu
,如果NO
,禁用CPU_TIME
的测量。如果YES
,并且仪器启用且计时,CPU_TIME
将被测量。 -
events_statements_current
,如果NO
,禁用events_statements_current
表中的单个语句事件收集。如果YES
,则启用语句事件收集,并且性能模式检查events_statements_history
和events_statements_history_long
消费者。 -
events_statements_history
如果events_statements_current
是NO
,则不检查。否则,events_statements_history
的值为NO
或YES
将禁用或启用在events_statements_history
表中的语句事件收集。 -
events_statements_history_long
如果events_statements_current
是NO
,则不检查。否则,events_statements_history_long
的值为NO
或YES
将禁用或启用在events_statements_history_long
表中的语句事件收集。
这些消费者需要 global_instrumentation
和 thread_instrumentation
都是 YES
,否则它们不被检查。如果被检查,它们的行为如下:
-
events_transactions_current
,如果是NO
,则禁用在events_transactions_current
表中的个体事务事件收集。如果是YES
,则启用事务事件收集,并检查events_transactions_history
和events_transactions_history_long
消费者。 -
events_transactions_history
如果events_transactions_current
是NO
,则不检查。否则,events_transactions_history
的值为NO
或YES
将禁用或启用在events_transactions_history
表中的事务事件收集。 -
events_transactions_history_long
如果events_transactions_current
是NO
,则不检查。否则,events_transactions_history_long
的值为NO
或YES
将禁用或启用在events_transactions_history_long
表中的事务事件收集。
语句摘要消费者需要 global_instrumentation
是 YES
,否则它不被检查。没有对语句事件消费者的依赖关系,因此您可以在不收集 events_statements_current
中的统计信息的情况下获取每个摘要的统计信息,这在开销方面是有利的。相反,您可以在 events_statements_current
中获取详细的语句,而不需要摘要(在这种情况下,DIGEST
和 DIGEST_TEXT
列为 NULL
)。
有关语句摘要的更多信息,请参阅 第 29.10 节,“Performance Schema 语句摘要和采样”。