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,这样有助于节省性能开销,且后续查看采集的事件信息时也方便进行筛选):
-
从上面的信息中可以看到,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系列表,反之不维护
- global_instrumentation处于顶级位置,优先级最高。
-
注意:
- 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配置协作示例