setup_instruments表
下setup_instruments
表列出了可为其收集事件的检测对象的类:
mysql>SELECT *FROM performance_schema.setup_instruments\G *************************** 1. row*************************** NAME: wait/synch/mutex/pfs/LOCK_pfs_share_list ENABLED: NO TIMED: NO PROPERTIES: singleton VOLATILITY: 1 DOCUMENTATION: Components can provide their own performance_schema tables. This lock protects the list of such tables definitions. ... *************************** 369. row*************************** NAME: stage/sql/executing ENABLED: NO TIMED: NO PROPERTIES: VOLATILITY: 0 DOCUMENTATION: NULL ... *************************** 687. row*************************** NAME: statement/abstract/Query ENABLED: YES TIMED: YES PROPERTIES: mutable VOLATILITY: 0 DOCUMENTATION: SQL query just received from the network. At this point, the real statement type is unknown, the type will be refined after SQL parsing. ... *************************** 696. row*************************** NAME: memory/performance_schema/metadata_locks ENABLED: YES TIMED: NULL PROPERTIES: global_statistics VOLATILITY: 1 DOCUMENTATION: Memory used for table performance_schema.metadata_locks ...
setup_instruments
即使未执行检测的代码,添加到源代码中的每个工具也会为该表提供一行。启用并执行工具后,将创建已检测实例,这些实例在xxx_instances
表中可见,例如file_instances
或rwlock_instances
。
对大多数setup_instruments
行的修改会立即影响监视。对于某些仪器,修改仅在服务器启动时有效。在运行时更改它们无效。这可能主要影响服务器中的互斥锁,条件和rwlock,尽管可能存在其他适用于此的工具。
有关setup_instruments
表在事件过滤中的作用的更多信息,请参见“事件预过滤”。
该setup_instruments
表包含以下列:
NAME
仪器名称。仪器名称可能具有多个部分,并形成一个层次结构,如“性能模式仪器命名约定”中所述。执行工具产生的事件具有
EVENT_NAME
从工具NAME
值中获取的值。(事件实际上并没有一个“名称”,但这提供了一种将事件与仪器关联的方法。)ENABLED
仪器是否启用。值为
YES
或NO
。禁用的仪器不产生任何事件。尽管此设置ENABLED
对已创建的仪器无效,但可以修改此列。TIMED
仪器是否定时。值是
YES
,NO
,或NULL
。尽管此设置TIMED
对已创建的仪器无效,但可以修改此列。甲
TIMED
的值NULL
表示该仪器不支持定时。例如,内存操作未计时,因此其TIMED
列为NULL
。设置
TIMED
于NULL
该支承件的定时没有影响的仪器,如不设置TIMED
于非NULL
对不支持定时的仪器。如果未对启用的仪器计时,则启用仪器代码,但计时器未启用。由仪器产生的事件具有
NULL
用于TIMER_START
,TIMER_END
和TIMER_WAIT
计时器值。反过来,当在汇总表中计算总和,最小,最大和平均时间值时,这些值将被忽略。PROPERTIES
仪器属性。该列使用
SET
数据类型,因此可以为每种仪器设置以下列表中的多个标志:global_statistics
:该工具仅生成全局摘要。无法提供更高级的摘要,例如每个线程,帐户,用户或主机的摘要。例如,大多数存储工具仅生成全局摘要。mutable
:仪器可以“变异”为更具体的一种。此属性仅适用于声明工具。progress
:仪器能够报告进度数据。此属性仅适用于舞台仪器。singleton
:仪器只有一个实例。例如,服务器中的大多数全局互斥锁是单例的,因此相应的工具也是如此。user
:该工具与用户工作负载(而不是系统工作负载)直接相关。一种这样的工具是wait/io/socket/sql/client_connection
。
VOLATILITY
仪器波动率。波动率值范围从低到高。这些值对应于头文件中定义的常量:
PSI_VOLATILITY_xxx
mysql/psi/psi_base.h
#define PSI_VOLATILITY_UNKNOWN 0 #define PSI_VOLATILITY_PERMANENT 1 #define PSI_VOLATILITY_PROVISIONING 2 #define PSI_VOLATILITY_DDL 3 #define PSI_VOLATILITY_CACHE 4 #define PSI_VOLATILITY_SESSION 5 #define PSI_VOLATILITY_TRANSACTION 6 #define PSI_VOLATILITY_QUERY 7 #define PSI_VOLATILITY_INTRA_QUERY 8
该
VOLATILITY
专栏仅作为参考,旨在为用户(和性能架构代码)提供一些有关仪器运行时行为的提示。低挥发性指数(PERMANENT = 1)的仪器在服务器启动时创建一次,并且在正常服务器运行期间不会销毁或重新创建。它们仅在服务器关闭期间被销毁。
例如,
wait/synch/mutex/pfs/LOCK_pfs_share_list
互斥定义为具有1的波动率,这意味着将创建一次。仪器本身可能产生的开销(即互斥体初始化)对该仪器无效。运行时开销仅在锁定或解锁互斥锁时发生。对于每个用户会话,都会创建并销毁具有较高波动率指数(例如SESSION = 5)的工具。例如,
wait/synch/mutex/sql/THD::LOCK_query_plan
互斥锁是在每次会话连接时创建的,并在会话断开连接时被销毁。此互斥锁对Performance Schema开销更为敏感,因为开销不仅来自锁定和解锁工具,还来自互斥量创建和销毁工具,后者的执行频率更高。
波动性的另一个方面涉及对
ENABLED
列的更新是否以及何时实际产生影响:- 的更新会
ENABLED
影响随后创建的检测对象,但对已创建的检测对象没有影响。 - 更具“易失性”的仪器将
setup_instruments
很快使用表中的新设置。
例如,此语句不会影响
LOCK_query_plan
现有会话的互斥量,但会对更新后创建的新会话产生影响:UPDATE performance_schema.setup_instrumentsSET ENABLED=valueWHERE NAME = 'wait/synch/mutex/sql/THD::LOCK_query_plan';该语句实际上完全无效:
UPDATE performance_schema.setup_instrumentsSET ENABLED=valueWHERE NAME = 'wait/synch/mutex/pfs/LOCK_pfs_share_list';此互斥锁是永久的,并且已在执行更新之前创建。互斥锁不会再创建,因此
ENABLED
in中的值setup_instruments
将永远不会使用。要启用或禁用此互斥锁,请改用该mutex_instances
表。- 的更新会
DOCUMENTATION
描述仪器用途的字符串。
NULL
如果没有描述可用,则为该值。
该setup_instruments
表具有以下索引:
- (
NAME
)上的主键
TRUNCATE TABLE
不允许用于该setup_instruments
表。