25.4.4 通过仪器进行预过滤

setup_instrumentstable 列出了可用的工具:

mysql> SELECT * FROM performance_schema.setup_instruments;
+---------------------------------------------------+---------+-------+
| NAME                                              | ENABLED | TIMED |
+---------------------------------------------------+---------+-------+
...
| stage/sql/end                                     | NO      | NO    |
| stage/sql/executing                               | NO      | NO    |
| stage/sql/init                                    | NO      | NO    |
| stage/sql/insert                                  | NO      | NO    |
...
| statement/sql/load                                | YES     | YES   |
| statement/sql/grant                               | YES     | YES   |
| statement/sql/check                               | YES     | YES   |
| statement/sql/flush                               | YES     | YES   |
...
| wait/synch/mutex/sql/LOCK_global_read_lock        | YES     | YES   |
| wait/synch/mutex/sql/LOCK_global_system_variables | YES     | YES   |
| wait/synch/mutex/sql/LOCK_lock_db                 | YES     | YES   |
| wait/synch/mutex/sql/LOCK_manager                 | YES     | YES   |
...
| wait/synch/rwlock/sql/LOCK_grant                  | YES     | YES   |
| wait/synch/rwlock/sql/LOGGER::LOCK_logger         | YES     | YES   |
| wait/synch/rwlock/sql/LOCK_sys_init_connect       | YES     | YES   |
| wait/synch/rwlock/sql/LOCK_sys_init_slave         | YES     | YES   |
...
| wait/io/file/sql/binlog                           | YES     | YES   |
| wait/io/file/sql/binlog_index                     | YES     | YES   |
| wait/io/file/sql/casetest                         | YES     | YES   |
| wait/io/file/sql/dbopt                            | YES     | YES   |
...

要控制是否启用了一项工具,请将其ENABLED列设置为YESNO。要配置是否收集已启用仪器的定时信息,请将其TIMED值设置为YESNO。设置TIMED列会影响性能模式 table 的内容,如第 25.4.1 节“性能架构事件计时”中所述。

对大多数setup_instruments行的修改会立即影响监视。对于某些仪器,修改仅在服务器启动时有效。在运行时更改它们无效。这可能主要影响服务器中的互斥锁,条件和 rwlock,尽管可能存在其他适用于此的工具。

setup_instrumentstable 提供了对事件产生的最基本控制形式。为了根据正在监视的对象或线程的类型进一步完善事件的产生,可以使用其他 table,如第 25.4.3 节“事件预过滤”中所述。

以下示例演示了对setup_instrumentstable 的可能操作。这些更改与其他预过滤操作一样,会影响所有用户。其中一些查询使用LIKE运算符,并且模式匹配仪器名称。有关指定模式以选择乐器的其他信息,请参见第 25.4.9 节“命名用于过滤操作的工具或使用者”

  • 禁用所有仪器:
UPDATE performance_schema.setup_instruments
SET ENABLED = 'NO';

现在将不会收集任何事件。

  • 禁用所有文件工具,将它们添加到当前禁用的工具集中:
UPDATE performance_schema.setup_instruments
SET ENABLED = 'NO'
WHERE NAME LIKE 'wait/io/file/%';
  • 仅禁用文件工具,启用所有其他工具:
UPDATE performance_schema.setup_instruments
SET ENABLED = IF(NAME LIKE 'wait/io/file/%', 'NO', 'YES');
  • 启用mysys库中除那些乐器外的所有乐器:
UPDATE performance_schema.setup_instruments
SET ENABLED = CASE WHEN NAME LIKE '%/mysys/%' THEN 'YES' ELSE 'NO' END;
  • 禁用特定的仪器:
UPDATE performance_schema.setup_instruments
SET ENABLED = 'NO'
WHERE NAME = 'wait/synch/mutex/mysys/TMPDIR_mutex';
  • 要切换乐器的状态,请“翻转”其ENABLED值:
UPDATE performance_schema.setup_instruments
SET ENABLED = IF(ENABLED = 'YES', 'NO', 'YES')
WHERE NAME = 'wait/synch/mutex/mysys/TMPDIR_mutex';
  • 禁用所有事件的计时:
UPDATE performance_schema.setup_instruments
SET TIMED = 'NO';