Pre Filtering by consumers - xiaoboluo768/mysql-system-schema GitHub Wiki

  • 本小节主要讲解按照consumers(performance_schema库下的按对象名称划分的consumers表)过滤进行配置
  • 在performance_schema中,setup_consumers表中列出了可用的consumers类型以及该类型的consumers是否启用,全表信息如下:
admin@localhost : performance_schema 11:14:48> select * from 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     |
+----------------------------------+---------+
15 rows in set (0.00 sec)
  • 通过修改setup_consumers表中的配置信息以实现在"Pre-Filtering" 阶段影响对应事件类型是否启用事件发送目的地(对应事件类型的consumers表)。要修改某类型的事件记录存储目地的,可以使用UPDATE语句修改对应配置行的ENABLED列值设置为YES或NO
    • 对setup_consumers表的修改会立即影响对应类型事件的监控
    • 如果某个事件类型的consumers被禁用,那么mysql server不会消耗时间和资源来维护该consumers。例如,如果您不关心历史事件信息,则可以通过如下语句来修改:
mysql> UPDATE setup_consumers SET ENABLED = 'NO' WHERE NAME LIKE '%history%';
  • setup_consumers表中的consumers按照优先级顺序,可列举为如下层次结构(你可以根据这个层次结构,关闭你可能不需要的较低级别的consumers,这样有助于节省性能开销,且后续查看采集的事件信息时也方便进行筛选): consumers_structure

  • 从上面的信息中可以看到,setup_consumers表中consumers配置层次结构中:

    • global_instrumentation处于顶级位置,优先级最高。
      • 当global_instrumentation为YES时,会检查setup_consumers表中的statements_digest和thread_instrumentation的配置,会附带检查setup_instruments、setup_objects、setup_timers配置表
      • 当global_instrumentation为YES时(无论setup_consumers表中的statements_digest和thread_instrumentation如何配置,只依赖于global_instrumentation的配置),会维护全局events输出表:mutex_instances、rwlock_instances、cond_instances、file_instances、users、hostsaccounts、socket_summary_by_event_name、file_summary_by_instance、file_summary_by_event_name、objects_summary_global_by_type、memory_summary_global_by_event_name、table_lock_waits_summary_by_table、table_io_waits_summary_by_index_usage、table_io_waits_summary_by_table、events_waits_summary_by_instance、events_waits_summary_global_by_event_name、events_stages_summary_global_by_event_name、events_statements_summary_global_by_event_name、events_transactions_summary_global_by_event_name
      • 当global_instrumentation为NO时,不会检查任何更低级别的consumers配置,不会维护任何events输出表(memory_%开头的events输出表除外,这些表维护只受setup_instruments配置表控制)
    • statements_digest和thread_instrumentation处于同一级别,优先级次于global_instrumentation,且依赖于global_instrumentation为YES时配置才会被检测
      • 当statements_digest为YES时,statements_digest consumers没有更低级别的配置,依赖于global_instrumentation为YES时配置才会被检测,会维护events输出表:events_statements_summary_by_digest
      • 当statements_digest为NO时,不维护events输出表:events_statements_summary_by_digest
      • 当thread_instrumentation为YES时,会检查setup_consumers表中的events_xxx_current配置(xxx表示:waits、stages、statements、transactions),会附带检查setup_actors、threads配置表。会维护events输出表 events_xxx_summary_by_yyy_by_event_name,其中: xxx含义同上; yyy表示:thread、user、host、account
      • 当thread_instrumentation为NO时,不检查setup_consumers表中的events_xxx_current配置,不维护events_xxx_current及其更低级别的events输出表
    • events_xxx_current系列(xxx含义同上)consumers处于同一级别。且依赖于thread_instrumentation为YES时配置才会被检测
      • 当events_xxx_current为YES时,会检测setup_consumers配置表中的events_xxx_history和events_xxx_history_long系列 consumers配置,会维护events_xxx_current系列表
      • 当events_xxx_current为NO时,不检测setup_consumers配置表中的events_xxx_history和events_xxx_history_long系列 consumers配置,不维护events_xxx_current系列表
    • events_xxx_history和events_xxx_history_long系列(同events_xxx_current中的xxx)consumers处于同一级别,优先级次于events_xxx_current 系列consumers(xxx含义同上),依赖于events_xxx_current 系列consumers为YES时才会被检测
      • 当events_xxx_history为YES时,没有更低级别的conosumers配置需要检测,但会附带检测setup_actors、threads配置表中的HISTORY列值,会维护events_xxx_history系列表,反之不维护
      • 当events_xxx_history_long为YES时,没有更低级别的conosumers配置需要检测,但会附带检测setup_actors、threads配置表中的HISTORY列值,会维护events_xxx_history_long系列表,反之不维护
  • 注意:

    • events 输出表events_xxx_summary_by_yyy_by_event_name的开关由global_instrumentation控制,且表中是有固定数据行,不可清理,truncate或者关闭相关的consumers时只是不统计相关的instruments收集的events数据,相关字段为0值
    • 如果performance_schema在对setup_consumers表做检查时发现某个consumers配置行的ENABLED 列值不为YES,则与这个consumers相关联的events输出表中就不会接收存储任何事件记录
    • 高级别的consumers设置不为YES时,依赖于这个consumers配置为YES时才会启用的那些更低级别的consumers将一同被禁用
  • setup_consumers表字段详解详见3.1.2. setup_consumers小节

  • 参考链接:https://dev.mysql.com/doc/refman/5.7/en/performance-schema-consumer-filtering.html


上一篇: Pre Filtering by threads | 下一篇: setup_instruments和setup_consumers配置协作示例