事件以生产者/消费者方式处理:
检测代码是事件的源,并产生要收集的事件。的
setup_instruments
下表列出了可以收集事件的工具,它们是否被启用,以及(对于启用的工具)是否收集定时信息:SELECT NAME, ENABLED, TIMED FROM performance_schema.setup_instruments;+---------------------------------------------------+---------+-------+ | 名字| |定时启用 | +---------------------------------------------------+---------+-------+ ...| wait/sync /mutex/sql/LOCK_global_read_lock | YES | YES | | wait/sync /mutex/sql/LOCK_global_system_variables | YES | YES | | wait/sync /mutex/sql/LOCK_lock_db | YES | YES | | wait/sync /mutex/sql/LOCK_manager | YES | YES |…
的
setup_instruments
表提供了控制事件产生的最基本形式。为了根据被监视的对象或线程的类型进一步细化事件生成,可以使用中所述的其他表5.3节“事件预过滤”.性能模式表是事件和消费事件的目的地。的
setup_consumers
下表列出了事件信息可以发送到的消费者类型,以及它们是否已启用:mysql> SELECT * FROM performance_schema.setup_consumers;+----------------------------------+---------+ | 启用名字| | +----------------------------------+---------+ | events_stages_current没有| | | events_stages_history没有| | | events_stages_history_long没有| | | events_statements_current |是| | events_statements_history |是| | events_statements_history_long没有| | | events_transactions_current |是| | events_transactions_history |是| | events_transactions_history_long没有| | | events_waits_current没有| | | events_waits_history | ||events_waits_history_long | NO | | global_instrumentation | YES | | thread_instrumentation | YES | | statements_digest | YES | +----------------------------------+---------+
过滤可以在性能监视的不同阶段进行:
预滤器。这是通过修改Performance Schema配置来实现的,以便只从生产者收集某些类型的事件,而收集的事件只更新某些消费者。为此,启用或禁用仪器或使用者。预过滤由性能模式完成,具有适用于所有用户的全局效果。
使用预过滤的原因:
减少开销。即使启用了所有工具,性能模式开销也应该是最小的,但是您可能希望进一步减少它。或者您不关心计时事件,希望禁用计时代码以消除计时开销。
避免在当前事件或历史表中填充您不感兴趣的事件。预过滤叶子更多”房间”在这些表中为启用仪器类型的行实例。如果只启用带预过滤的文件工具,则不收集非文件工具的行。使用后过滤,将收集非文件事件,为文件事件留下更少的行。
避免维护某些类型的事件表。如果禁用某个使用者,服务器就不会花时间维护该使用者的目的地。例如,如果不关心事件历史,可以禁用历史表消费者以提高性能。
后过滤。这涉及到的使用
在哪里
子句从性能模式表中选择信息,以指定希望查看哪些可用事件。后过滤是在每个用户的基础上执行的,因为各个用户可以选择感兴趣的可用事件。使用后过滤的原因:
避免为个别用户决定哪些事件信息是感兴趣的。
当预先不知道要使用预过滤施加的限制时,使用性能模式来调查性能问题。
以下部分提供了关于预过滤的更多详细信息,并提供了在过滤操作中命名工具或消费者的指南。有关编写查询以检索信息(后过滤)的信息,请参见第六章,性能模式查询.