25.4.7 Consumer 预先过滤
setup_consumerstable 列出了可用的使用者类型以及已启用的使用者类型:
mysql> SELECT * FROM performance_schema.setup_consumers;
+----------------------------------+---------+
| NAME | ENABLED |
+----------------------------------+---------+
| events_stages_current | NO |
| events_stages_history | NO |
| events_stages_history_long | NO |
| events_statements_current | YES |
| events_statements_history | YES |
| events_statements_history_long | NO |
| events_transactions_current | NO |
| events_transactions_history | NO |
| 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_consumerstable 以在使用者阶段影响预过滤,并确定将事件发送到的目的地。要启用或禁用使用者,请将其ENABLED
值设置为YES
或NO
。
对setup_consumerstable 的修改会立即影响监视。
如果禁用使用者,则服务器不会花费时间维护该使用者的目的地。例如,如果您不关心历史事件信息,请禁用历史记录使用者:
UPDATE performance_schema.setup_consumers
SET ENABLED = 'NO'
WHERE NAME LIKE '%history%';
setup_consumerstable 中的使用者设置形成了从较高级别到较低级别的层次结构。适用以下原则:
-
除非性能架构检查使用者并启用了使用者,否则与使用者相关联的目标不会接收任何事件。
-
仅在启用了它依赖的所有使用者(如果有)的情况下,才检查该使用者。
-
如果未选中某个使用方,或者选中了某个使用方但将其禁用,则不检查其他依赖它的使用方。
-
从属 Consumer 可以有自己的从属 Consumer。
-
如果事件不会发送到任何目的地,则性能架构不会产生该事件。
以下列 table 描述了可用的 Consumer 值。有关几种具有代 table 性的使用者配置及其对仪器的影响的讨论,请参见第 25.4.8 节“Consumer 配置示例”。
Global 和线程 Consumer
-
global_instrumentation
是最高级别的 Consumer。如果global_instrumentation
是NO
,则会禁用全局检测。所有其他设置均为较低级别,不进行检查;设置为什么无关紧要。在当前事件或事件历史记录 table 中,不维护全局或每个线程的信息,也不收集单个事件。如果global_instrumentation
是YES
,则性能架构将维护全局状态的信息,并还会检查thread_instrumentation
使用者。 -
仅当
global_instrumentation
是YES
时才检查thread_instrumentation
。否则,如果thread_instrumentation
为NO
,它将禁用特定于线程的检测,并且所有较低级别的设置都将被忽略。每个线程均不维护任何信息,并且在当前事件或事件历史 table 中未收集任何单独的事件。如果thread_instrumentation
是YES
,则性能架构将维护线程特定的信息,并还会检查events_xxx_current
使用者。
await 事件的 Consumer
这些使用者要求global_instrumentation
和thread_instrumentation
均为YES
或未选中它们。如果选中,它们的行为如下:
-
events_waits_current
,如果是NO
,则禁止在events_waits_currenttable 中收集各个 await 事件。如果为YES
,则启用 await 事件收集,并且性能模式检查events_waits_history
和events_waits_history_long
使用者。 -
如果
event_waits_current
是NO
则不检查events_waits_history
。否则,events_waits_history
值为NO
或YES
会禁用或启用events_waits_historytable 中的 await 事件收集。 -
如果
event_waits_current
是NO
则不检查events_waits_history_long
。否则,events_waits_history_long
值为NO
或YES
会禁用或启用events_waits_history_longtable 中的 await 事件收集。
舞台活动的 Consumer
这些使用者要求global_instrumentation
和thread_instrumentation
均为YES
或未选中它们。如果选中,它们的行为如下:
-
events_stages_current
,如果是NO
,则禁止在events_stages_currenttable 中收集各个阶段事件。如果为YES
,则启用阶段事件收集,并且性能模式将检查events_stages_history
和events_stages_history_long
使用者。 -
如果
event_stages_current
是NO
则不检查events_stages_history
。否则,events_stages_history
值为NO
或YES
值将禁用或启用events_stages_historytable 中阶段事件的收集。 -
如果
event_stages_current
是NO
则不检查events_stages_history_long
。否则,events_stages_history_long
值为NO
或YES
值将禁用或启用events_stages_history_longtable 中阶段事件的收集。
声明事件使用者
这些使用者要求global_instrumentation
和thread_instrumentation
均为YES
或未选中它们。如果选中,它们的行为如下:
-
events_statements_current
,如果是NO
,则禁止在events_statements_currenttable 中收集单个语句事件。如果为YES
,则启用语句事件收集,并且性能模式检查events_statements_history
和events_statements_history_long
使用者。 -
如果
events_statements_current
是NO
则不检查events_statements_history
。否则,events_statements_history
值为NO
或YES
会禁用或启用events_statements_historytable 中语句事件的收集。 -
如果
events_statements_current
是NO
则不检查events_statements_history_long
。否则,events_statements_history_long
值为NO
或YES
会禁用或启用events_statements_history_longtable 中语句事件的收集。
Transaction 事件的使用者
这些使用者要求global_instrumentation
和thread_instrumentation
均为YES
或未选中它们。如果选中,它们的行为如下:
-
events_transactions_current
,如果是NO
,则禁止在events_transactions_currenttable 中收集单个 Transaction 事件。如果为YES
,则启用事务事件收集,并且性能模式检查events_transactions_history
和events_transactions_history_long
使用者。 -
如果
events_transactions_current
是NO
则不检查events_transactions_history
。否则,events_transactions_history
值为NO
或YES
会禁用或启用events_transactions_historytable 中事务事件的收集。 -
如果
events_transactions_current
是NO
则不检查events_transactions_history_long
。否则,events_transactions_history_long
值为NO
或YES
会禁用或启用events_transactions_history_longtable 中事务事件的收集。
对帐单摘要 Consumer
statements_digest
使用者要求global_instrumentation
为YES
或未选中它。不依赖于语句事件使用者,因此您可以按摘要获取每个摘要的统计信息,而不必在events_statements_current中收集统计信息,这在开销方面很有利。相反,您可以在events_statements_current中获得不带摘要的详细语句(DIGEST
和DIGEST_TEXT
列将为NULL
)。
有关语句摘要的更多信息,请参见第 25.10 节“性能模式语句摘要”。