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_SCHEMA
和 OBJECT_NAME
列应包含文字模式或对象名称,或 '%'
以匹配任何名称。
ENABLED
列指示是否监控匹配的对象,TIMED
指示是否收集计时信息。设置 TIMED
列会影响性能模式表内容,如 第 29.4.1 节,“性能模式事件计时” 中所述。
默认对象配置的效果是,对除 mysql
、INFORMATION_SCHEMA
和 performance_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
行可能具有不同的 ENABLED
和 TIMED
值。
对于与表相关的事件,性能模式会将 setup_objects
的内容与 setup_instruments
相结合,以确定是否启用仪器以及是否为已启用的仪器计时
对于与
setup_objects
中的行匹配的表,表仪器仅在setup_instruments
和setup_objects
中的ENABLED
均为YES
时才会产生事件。两个表中的
TIMED
值会组合在一起,因此只有当两个值均为YES
时才会收集计时信息。
对于存储的程序对象,性能模式直接从 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
行的匹配方式对两者相同。无法为一个表启用监控而不对另一个表启用监控。但是,每个表都是单独进行仪器监控的。