Documentation Home

22.4.5 按对象预过滤

setup_objects表控制性能模式是否监视特定的表对象。初始setup_objects 内容如下所示:

mysql> SELECT * FROM performance_schema.setup_objects;
+-------------+--------------------+-------------+---------+-------+
| OBJECT_TYPE | OBJECT_SCHEMA      | OBJECT_NAME | ENABLED | TIMED |
+-------------+--------------------+-------------+---------+-------+
| TABLE       | mysql              | %           | NO      | NO    |
| TABLE       | performance_schema | %           | NO      | NO    |
| TABLE       | information_schema | %           | NO      | NO    |
| TABLE       | %                  | %           | YES     | YES   |
+-------------+--------------------+-------------+---------+-------+

对表的修改setup_objects 会立即影响对象监控。

OBJECT_TYPE列指示行适用的对象类型。TABLE 过滤会影响表 I/O 事件 ( wait/io/table/sql/handlerinstrument) 和表锁定事件 ( wait/lock/table/sql/handlerinstrument)。

和列应包含文字模式或表名,或OBJECT_SCHEMA匹配 任何名称。 OBJECT_NAME'%'

ENABLED列表示是否监控匹配对象,TIMED表示是否收集定时信息。设置 TIMED列会影响 Performance Schema 表内容,如 第 22.4.1 节,“Performance Schema Event Timing”中所述。

默认对象配置的效果是检测除 、 和 数据库中的mysql所有 INFORMATION_SCHEMAperformance_schema。( INFORMATION_SCHEMA无论 的内容如何,​​都不会检测数据库中的 表setup_objects;该行 information_schema.%只是明确显示了此默认值。)

当 Performance Schema 检查中的匹配项时 setup_objects,它会首先尝试找到更具体的匹配项。对于匹配给定的行 OBJECT_TYPE,性能模式按以下顺序检查行:

  • 行 与 。 OBJECT_SCHEMA='literal'OBJECT_NAME='literal'

  • 行 与。 OBJECT_SCHEMA='literal'OBJECT_NAME='%'

  • OBJECT_SCHEMA='%'OBJECT_NAME='%'

例如,对于一个表db1.t1,Performance Schema 在行中查找和TABLE的匹配项,然后是和,然后是和。匹配发生的顺序很重要,因为不同的匹配行可以有不同的 值。 'db1''t1''db1''%''%''%'setup_objectsENABLEDTIMED

对于表相关的事件,Performance Schema结合setup_objectswith 的内容setup_instruments来判断是否启用instruments以及是否对启用的instruments进行计时:

  • 对于与 中的行匹配的表, setup_objects只有 在和 ENABLEDYES都 存在时,表工具才会产生事件。 setup_instrumentssetup_objects

  • 两个表中的TIMED值合并在一起,因此仅当两个值都为 时才收集时序信息YES

假设包含适用于 、和 setup_objects的以下行: TABLEdb1db2db3

+-------------+---------------+-------------+---------+-------+
| 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   |
+-------------+---------------+-------------+---------+-------+

如果表相关工具 setup_instrumentsENABLED值为NO,则不会监视该对象的事件。如果 ENABLED值为,则根据相关 行 中YES的值进行事件监听 :ENABLEDsetup_objects

  • db1.t1事件被监控

  • db1.t2事件不受监控

  • db2.t3事件被监控

  • db3.t4事件不受监控

  • db4.t5事件被监控

类似的逻辑适用于组合 和表中的TIMED 列以确定是否收集事件计时信息。 setup_instrumentssetup_objects

如果持久表和临时表具有相同的名称,则两者对行的匹配setup_objects方式相同。不可能只对一个表启用监视而对另一个表不启用监视。但是,每个表都是单独检测的。