按对象进行预过滤
该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
列会影响性能模式表的内容,如“性能模式事件计时”中所述。
缺省对象配置的效果是仪器除了那些在所有对象mysql
,INFORMATION_SCHEMA
和performance_schema
数据库。(INFORMATION_SCHEMA
不考虑数据库中的表的内容,无论的内容如何setup_objects
;该行information_schema.%
仅使该默认值明确。)
当“性能模式”在中检查匹配项时setup_objects
,它将尝试首先查找更具体的匹配项。对于与给定匹配的行,OBJECT_TYPE
性能模式将按以下顺序检查行:
- 与和排。
OBJECT_SCHEMA='literal'
OBJECT_box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;font-size:13.5432px;vertical-align:baseline;background:transparent;">literal'
- 与和排。
OBJECT_SCHEMA='literal'
OBJECT_
- 与
OBJECT_SCHEMA='%'
和排OBJECT_
。
例如,对于一个表db1.t1
,性能模式TABLE
在行中查找与'db1'
和的匹配项't1'
,然后为'db1'
和'%'
,然后为'%'
和'%'
。匹配发生的顺序很重要,因为不同的匹配setup_objects
行可以具有不同的ENABLED
和TIMED
值。
对于表相关的事件,性能模式结合的内容setup_objects
与setup_instruments
以确定是否启用仪器以及是否同时启用仪器:
- 对于匹配一排桌子
setup_objects
,桌子仪器产生的事件仅ENABLED
是YES
在这两个setup_instruments
和setup_objects
。 - 将
TIMED
两个表中的值组合在一起,以便仅在两个值均为时才收集计时信息YES
。
对于存储的程序对象,性能模式直接从行中获取ENABLED
和TIMED
列setup_objects
。的值没有组合setup_instruments
。
假设setup_objects
包含以下TABLE
适用于行db1
,db2
以及db3
:
+------------- +--------------- +------------- +--------- +------- + | 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
根据ENABLED
相关setup_objects
行中的值进行事件监视:
db1.t1
监控事件db1.t2
事件不受监控db2.t3
监控事件db3.t4
事件不受监控db4.t5
监控事件
类似的逻辑适用于组合和表中的TIMED
列,以确定是否收集事件计时信息。setup_instruments
setup_objects
如果永久表和临时表具有相同的名称,则对setup_objects
行的匹配将以相同的方式进行。无法对一个表启用监视,而对另一表则无法启用。但是,每个表都是单独检测的。