setup_objects 表控制 Performance Schema 是否监控特定的表和存储程序对象。初始的 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_SCHEMA 和 OBJECT_NAME 列应包含文字架构或对象名称,或 '%' 以匹配任何名称。
ENABLED 列指示是否监控匹配的对象,而 TIMED 指示是否收集计时信息。 设置 TIMED 列会影响 Performance Schema 表内容,如 第 29.4.1 节,“Performance Schema 事件计时” 中所述。
默认对象配置的效果是,对除 mysql、INFORMATION_SCHEMA 和 performance_schema 数据库中的对象之外的所有对象进行仪器化。 (INFORMATION_SCHEMA 数据库中的表无论 setup_objects 的内容如何都不会被仪器化;information_schema.% 的行只是使此默认值变得明确。)
当 Performance Schema 检查 setup_objects 中的匹配项时,它会尝试首先找到更具体的匹配项。 对于匹配给定 OBJECT_TYPE 的行,Performance Schema 按此顺序检查行
具有
OBJECT_SCHEMA='和literal'OBJECT_NAME='的行。literal'具有
OBJECT_SCHEMA='和literal'OBJECT_NAME='%'的行。具有
OBJECT_SCHEMA='%'和OBJECT_NAME='%'的行。
例如,对于表 db1.t1,Performance Schema 会在 TABLE 行中查找 'db1' 和 't1' 的匹配项,然后查找 'db1' 和 '%',然后查找 '%' 和 '%'。 匹配发生的顺序很重要,因为不同的匹配 setup_objects 行可能具有不同的 ENABLED 和 TIMED 值。
对于与表相关的事件,Performance Schema 会将 setup_objects 的内容与 setup_instruments 相结合,以确定是否启用仪器以及是否对已启用的仪器计时
对于与
setup_objects中的行匹配的表,表仪器仅在setup_instruments和setup_objects中的ENABLED都为YES时才会产生事件。两个表中的
TIMED值会组合起来,因此只有当两个值都为YES时才会收集计时信息。
对于存储的程序对象,Performance Schema 直接从 setup_objects 行获取 ENABLED 和 TIMED 列。不会将值与 setup_instruments 中的值组合。
假设 setup_objects 包含以下适用于 db1、db2 和 db3 的 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_instruments 和 setup_objects 表的 TIMED 列,以确定是否收集事件计时信息。
如果持久表和临时表具有相同的名称,则对 setup_objects 行的匹配方式对两者都是一样的。无法仅对其中一个表启用监控,而不对另一个表启用监控。但是,每个表都是独立进行仪器监控的。