事件以生产者/消费者方式处理:
-
被instrumented的代码是事件的来源,产生要收集的事件。
setup_instruments
表列出了可以收集事件的仪器,是否启用它们,以及(对于启用的仪器)是否收集计时信息:mysql> SELECT NAME, ENABLED, TIMED FROM performance_schema.setup_instruments; +---------------------------------------------------+---------+-------+ | NAME | ENABLED | TIMED | +---------------------------------------------------+---------+-------+ ... | wait/synch/mutex/sql/LOCK_global_read_lock | YES | YES | | wait/synch/mutex/sql/LOCK_global_system_variables | YES | YES | | wait/synch/mutex/sql/LOCK_lock_db | YES | YES | | wait/synch/mutex/sql/LOCK_manager | YES | YES | ...
setup_instruments
表提供了对事件生产的基本控制。为了根据监控的对象或线程类型进一步细化事件生产,可以使用其他表,如 第 29.4.3 节,「事件预过滤」 中所述。 -
性能模式表是事件的目的地,消费事件。
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 | +----------------------------------+---------+
过滤可以在性能监控的不同阶段进行:
-
预过滤。 这是在性能模式配置中完成的,以便仅收集某些类型的事件,并将收集的事件更新到某些消费者中。要做到这一点,启用或禁用仪器或消费者。预过滤由性能模式执行,对所有用户都有全局影响。
使用预过滤的原因:
-
为了减少开销。性能模式的开销应该很小,即使所有仪器都启用了,但您可能想进一步减少它。或者,您不关心计时事件,并想禁用计时代码以消除计时开销。
-
为了避免填充当前事件或历史表中的事件,您不感兴趣。预过滤留下了这些表中的更多「房间」用于启用的仪器类型的实例。如果您仅启用文件仪器进行预过滤,那么不会收集非文件仪器的行。使用后过滤,非文件事件将被收集,留下了较少的行用于文件事件。
-
为了避免维护某些事件表。如果您禁用了消费者,服务器就不会花费时间维护该消费者的目标。
-
-
后过滤。 这涉及到在从性能模式表中选择信息的查询中使用
WHERE
子句,以指定您想看到的可用事件。后过滤是按用户基础进行的,因为个体用户选择了哪些可用事件是有趣的。使用后过滤的原因:
-
为了避免为个体用户做出关于哪些事件信息是有趣的决定。
-
为了使用性能模式来调查性能问题,而预过滤的限制在事先不知道的情况下。
-
以下部分提供了关于预过滤的更多详细信息,并为过滤操作中的仪器或消费者命名提供了指南。有关编写查询以检索信息(后过滤)的信息,请参阅 第 29.5 节,「性能模式查询」。