25.4.5 按对象进行预过滤

setup_objectstable 控制性能模式是否监视特定的 table 和存储的程序对象。最初的setup_objects内容如下所示:

mysql> SELECT * FROM performance_schema.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   |
+-------------+--------------------+-------------+---------+-------+

setup_objectstable 的修改会立即影响对象监视。

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

OBJECT_SCHEMAOBJECT_NAME列应包含 Literals 模式或对象名称,或'%'以匹配任何名称。

ENABLED列指示是否监视匹配的对象,TIMED列指示是否收集定时信息。设置TIMED列会影响性能模式 table 的内容,如第 25.4.1 节“性能架构事件计时”中所述。

默认对象配置的作用是检测除mysqlINFORMATION_SCHEMAperformance_schema数据库中的对象以外的所有对象。 (无论setup_objects的内容如何,都不会检测INFORMATION_SCHEMA数据库中的 table; information_schema.%的行仅使此默认值明确。)

当性能模式在setup_objects中检查匹配项时,它将尝试首先查找更具体的匹配项。对于与给定OBJECT_TYPE匹配的行,性能模式将按以下 Sequences 检查行:

  • 具有OBJECT_SCHEMA='literal'OBJECT_NAME='literal'的行。

  • 具有OBJECT_SCHEMA='literal'OBJECT_NAME='%'的行。

  • 具有OBJECT_SCHEMA='%'OBJECT_NAME='%'的行。

例如,对于 tabledb1.t1,性能模式在TABLE行中查找'db1''t1'的匹配项,然后是'db1''%'的匹配项,然后是'%''%'的匹配项。匹配发生的 Sequences 很重要,因为不同的匹配setup_objects行可以具有不同的ENABLEDTIMED值。

对于与 table 相关的事件,性能模式将setup_objectssetup_instruments的内容结合起来,以确定是否启用工具以及是否对启用的工具进行计时:

  • 对于与setup_objects中的行匹配的 table,仅当setup_instrumentssetup_objects中的ENABLEDYES时,table 工具才会产生事件。

  • 将两个 table 中的TIMED值组合在一起,以便仅在两个值均为YES时才收集计时信息。

对于存储的程序对象,性能模式直接从setup_objects行获取ENABLEDTIMED列。没有值与setup_instruments的组合。

假设setup_objects包含适用于db1db2db3的以下TABLE行:

+-------------+---------------+-------------+---------+-------+
| 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_instruments中与对象相关的仪器的ENABLED值为NO,则不会监视该对象的事件。如果ENABLED值为YES,则根据相关setup_objects行中的ENABLED值进行事件监视:

  • db1.t1个事件受到监视

  • db1.t2个事件不受监视

  • db2.t3个事件受到监视

  • db3.t4个事件不受监视

  • db4.t5个事件受到监视

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

如果永久 table 和临时 table 具有相同的名称,则针对setup_objects行的匹配将以相同的方式发生。无法对一个 table 启用监视,而对另一 table 则无法启用。但是,每个 table 都是单独检测的。