Skip to content

Pre Filtering by objects

xiaoboluo768 edited this page Jun 8, 2020 · 2 revisions
  • 本小节主要讲解按照数据库对象(例如:事件、存储过程、表、触发器等)纬度进行配置
  • setup_objects表控制performance_schema是否启用对某个特定表和存储程序的监控功能,该表中的初始配置信息如下(该表可以使用truncate语句清空,但不建议这么做,里边的配置信息是预设值,你可以根据需要把相应的字段通过update语句来进行修改,注意:对setup_objects表的修改会立即影响对象监控):
admin@localhost : performance_schema 11:36:16> SELECT * FROM setup_objects;
+-------------+--------------------+-------------+---------+-------+
| OBJECT_TYPE | OBJECT_SCHEMA      | OBJECT_NAME | ENABLED | TIMED |
+-------------+--------------------+-------------+---------+-------+
| EVENT       | mysql              | %           | NO      | NO    |
| EVENT       | performance_schema | %           | NO      | NO    |
| EVENT       | information_schema | %           | NO      | NO    |
| EVENT       | %                  | %           | YES     | YES   |
| FUNCTION    | mysql              | %           | NO      | NO    |
| FUNCTION    | performance_schema | %           | NO      | NO    |
| FUNCTION    | information_schema | %           | NO      | NO    |
| FUNCTION    | %                  | %           | YES     | YES   |
| PROCEDURE   | mysql              | %           | NO      | NO    |
| PROCEDURE   | performance_schema | %           | NO      | NO    |
| PROCEDURE   | information_schema | %           | NO      | NO    |
| PROCEDURE   | %                  | %           | YES     | YES   |
| TABLE       | mysql              | %           | NO      | NO    |
| TABLE       | performance_schema | %           | NO      | NO    |
| TABLE       | information_schema | %           | NO      | NO    |
| TABLE       | %                  | %           | YES     | YES   |
| TRIGGER     | mysql              | %           | NO      | NO    |
| TRIGGER     | performance_schema | %           | NO      | NO    |
| TRIGGER     | information_schema | %           | NO      | NO    |
| TRIGGER     | %                  | %           | YES     | YES   |
+-------------+--------------------+-------------+---------+-------+
20 rows in set (0.00 sec)
  • 下面分别这几个表的字段含义进行解释

    • OBJECT_TYPE:表示对象的类型(任务调度器、函数、存储过程、表、触发器其中的一种),例如:TABLE类型会影响表的I/O事件(wait/io/table/sql/handler instrument)和表锁事件(wait/lock/table/sql/handler instrument),注意:如果你使用INSERT语句自行插入配置规则,该字段必须为EVENT,FUNCTION,PROCEDURE,TABLE,TRIGGER几个值,其他值无效
    • OBJECT_SCHEMA和OBJECT_NAME:表示需要监视对象的库名和库内的表名,也可以使用“%”来匹配任意的库名或表名,也可以使用具体的库名和表名
    • ENABLED:表示是否启用某行配置规则中的instruments,设置为YES时表示启用,注意:如果你使用INSERT语句自行插入配置规则,该字段必须为YES和NO两个值,其他值无效
    • TIMED:表示是否启用某行配置规则中的instruments的时间收集功能,设置为YES表示启用,注意:如果你使用INSERT语句自行插入配置规则,该字段必须为YES和NO两个值,其他值无效
  • setup_objects配置表中默认的配置规则是不启用对mysql、INFORMATION_SCHEMA、performance_schema数据库下的对象进行监视的(ENABLED和TIMED列值全都为NO)

  • performance_schema在setup_objects表中进行查询匹配时,如果发现某个OBJECT_TYPE列值有多行,则会尝试着匹配更多的配置行,如下(performance_schema按照如下顺序进行检查):

    • OBJECT_SCHEMA ='literal' and OBJECT_NAME ='literal'
    • OBJECT_SCHEMA ='literal' and OBJECT_NAME ='%'
    • OBJECT_SCHEMA ='%' and OBJECT_NAME ='%'
    • 例如,要匹配表对象db1.t1,performance_schema在setup_objects表中先查找“OBJECT_SCHEMA = db1”和“OBJECT_NAME = t1”的匹配项,然后查找“OBJECT_SCHEMA = db1”和“OBJECT_NAME =%”,然后查找“OBJECT_SCHEMA = %”和“OBJECT_NAME = %”。匹配顺序很重要,因为不同的匹配行中的ENABLED和TIMED列可以有不同的值,最终会选择一个最精确的匹配项
  • 对于表对象相关事件,instruments是否生效需要看setup_objects与setup_instruments两个表中的配置内容相结合,以确定是否启用instruments以及计时器功能(例如前面说的I/O事件:wait/io/table/sql/handler instrument和表锁事件:wait/lock/table/sql/handler instrument,在setup_instruments配置表中也有明确的配置选项):

    • 只有在Setup_instruments和setup_objects中的ENABLED列都为YES时,表的instruments才会生成事件信息
    • 只有在Setup_instruments和setup_objects中的TIMED列都为YES时,表的instruments才会启用计时器功能(收集时间信息)
    • 例如:要监视db1.t1、db1.t2、db2.%、db3.%这些表,setup_instruments和setup_objects两个表中有如下配置项
# setup_instruments表
admin@localhost : performance_schema 03:06:01> select * from setup_instruments where name like '%/table/%';
+-----------------------------+---------+-------+
| NAME                        | ENABLED | TIMED |
+-----------------------------+---------+-------+
| wait/io/table/sql/handler   | YES     | YES   |
| wait/lock/table/sql/handler | YES     | YES   |
+-----------------------------+---------+-------+
2 rows in set (0.00 sec)

# setup_objects表
+-------------+---------------+-------------+---------+-------+
| OBJECT_TYPE | OBJECT_SCHEMA | OBJECT_NAME | ENABLED | TIMED |
+-------------+---------------+-------------+---------+-------+
| TABLE       | db1           | t1          | YES     | YES   |
| TABLE       | db1           | t2          | NO      | NO    |
| TABLE       | db2           | %           | YES     | YES   |
| TABLE       | db3           | %           | NO      | NO    |
| TABLE       | %             | %           | YES     | YES   |
+-------------+---------------+-------------+---------+-------+

# 以上两个表中的配置项综合之后,只有db1.t1、db2.%、%.%的表对象的instruments会被启用,db1.t2和db3.%不会启用,因为这两个对象在setup_objects配置表中ENABLED和TIMED字段值为NO
  • 对于存储程序对象相关的事件,performance_schema只需要从setup_objects表中读取配置项的ENABLED和TIMED列值。因为存储程序对象在setup_instruments表中没有对应的配置项

  • 如果持久性表和临时表名称相同,则在setup_objects表中进行匹配时,针对这两种类型的表的匹配规则都同时生效(不会发生一个表启用监控,另外一个表不启用)

  • 关于setup_actors表字段详解详见3.1.4. setup_objects小节

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


上一篇: Pre Filtering by instruments | 下一篇: Pre Filtering by threads

Clone this wiki locally