按对象进行预过滤
该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_instrumentssetup_objects
如果永久表和临时表具有相同的名称,则对setup_objects行的匹配将以相同的方式进行。无法对一个表启用监视,而对另一表则无法启用。但是,每个表都是单独检测的。
