文档主页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 参考手册  /  ...  /  按对象进行预过滤

29.4.5 按对象进行预过滤

setup_objects 表控制性能模式是否监控特定的表和存储过程对象。初始的 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_objects 表的修改会立即影响对象监控。

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

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

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

默认对象配置的效果是,对除 mysqlINFORMATION_SCHEMAperformance_schema 数据库中的对象之外的所有对象进行测量。(INFORMATION_SCHEMA 数据库中的表无论 setup_objects 中的内容如何,都不会被测量;information_schema.% 的行只是明确了这一点。)

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

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

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

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

例如,对于一个表 db1.t1,性能模式将在 TABLE 行中查找与 'db1''t1' 的匹配项,然后查找与 'db1''%' 的匹配项,最后查找与 '%''%' 的匹配项。匹配发生的顺序很重要,因为不同的匹配 setup_objects 行可能具有不同的 ENABLEDTIMED 值。

对于与表相关的事件,性能模式会将 setup_objects 的内容与 setup_instruments 相结合,以确定是否启用仪器以及是否为已启用的仪器计时

  • 对于与 setup_objects 中的行匹配的表,表仪器仅在 setup_instrumentssetup_objects 中的 ENABLED 均为 YES 时才会产生事件。

  • 两个表中的 TIMED 值会组合在一起,因此只有当两个值均为 YES 时才会收集计时信息。

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

假设 setup_objects 包含以下应用于 db1db2db3TABLE

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

  • db1.t1 事件将被监控。

  • db1.t2 事件不会被监控。

  • db2.t3 事件将被监控。

  • db3.t4 事件不会被监控。

  • db4.t5 事件将被监控。

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

如果持久表和临时表具有相同的名称,则对 setup_objects 行的匹配方式对两者相同。无法为一个表启用监控而不对另一个表启用监控。但是,每个表都是单独进行仪器监控的。