Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

29.4.2 性能模式事件过滤

事件在生产者/消费者模式下处理:

  • 已instrument的代码是事件源,并将事件发送到收集。 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     |
    +----------------------------------+---------+

过滤可以在性能监控的不同阶段进行:

  • 预过滤。 这是在修改Performance Schema配置以便只收集特定类型的事件,并且收集到的事件更新特定的消费者。为了这样做,启用或禁用工具或消费者。预过滤由性能模式执行,对所有用户都有全局影响。

    使用预过滤的原因:

    • 减少开销。即使所有工具都被启用,Performance Schema的开销也应该是最小的,但或许你想要进一步减少它。或者,你不关心时间事件,并且想要禁用时间代码以消除时间开销。

    • 避免将无关事件填充到当前事件或历史表中。预过滤留下了更多 空间 用于启用的工具类型的行。如果你只启用文件工具进行预过滤,那么不会收集非文件工具的行。使用后过滤时,非文件事件被收集,留下了更少的文件事件行。

    • 避免维护某些事件表。如果你禁用一个消费者,服务器就不再花时间维护该消费者的目的地。例如,如果你对事件历史不感兴趣,你可以禁用历史表的消费者以提高性能。

  • 后过滤。 这涉及使用 WHERE 子句在查询中选择Performance Schema表中的信息,以指定你想要看到的可用事件。后过滤是按用户进行的,因为每个用户都可以选择哪些可用事件对他们有兴趣。

    使用后过滤的原因:

    • 避免为单个用户决定哪些事件信息是感兴趣的。

    • 在性能问题调查中使用Performance Schema,当预先知道要施加的限制时,无法提前确定。

以下部分提供了关于预过滤的更多细节,并为过滤操作中的工具或消费者命名提供指导。有关编写查询以检索信息(后过滤)的详细信息,请参阅 第29.5节,“性能模式查询”