Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Performance Schema Event Filtering

29.4.2 性能模式事件过滤

事件以生产者/消费者方式处理:

  • 被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 节,「性能模式查询」