• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 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_instancesrwlock_instances

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

    有关setup_instruments表在事件过滤中的作用的更多信息,请参见“事件预过滤”。

    setup_instruments表包含以下列:

    • NAME

      仪器名称。仪器名称可能具有多个部分,并形成一个层次结构,如“性能模式仪器命名约定”中所述。执行工具产生的事件具有EVENT_NAME从工具NAME值中获取的值。(事件实际上并没有一个“名称”,但这提供了一种将事件与仪器关联的方法。)

    • ENABLED

      仪器是否启用。值为YESNO。禁用的仪器不产生任何事件。尽管此设置ENABLED对已创建的仪器无效,但可以修改此列。

    • TIMED

      仪器是否定时。值是YESNO,或NULL。尽管此设置TIMED对已创建的仪器无效,但可以修改此列。

      TIMED的值NULL表示该仪器不支持定时。例如,内存操作未计时,因此其TIMED列为NULL

      设置TIMEDNULL该支承件的定时没有影响的仪器,如不设置TIMED于非NULL对不支持定时的仪器。

      如果未对启用的仪器计时,则启用仪器代码,但计时器未启用。由仪器产生的事件具有NULL用于TIMER_STARTTIMER_ENDTIMER_WAIT计时器值。反过来,当在汇总表中计算总和,最小,最大和平均时间值时,这些值将被忽略。

    • PROPERTIES

      仪器属性。该列使用SET数据类型,因此可以为每种仪器设置以下列表中的多个标志:

      • global_statistics:该工具仅生成全局摘要。无法提供更高级的摘要,例如每个线程,帐户,用户或主机的摘要。例如,大多数存储工具仅生成全局摘要。
      • mutable:仪器可以“变异”为更具体的一种。此属性仅适用于声明工具。
      • progress:仪器能够报告进度数据。此属性仅适用于舞台仪器。
      • singleton:仪器只有一个实例。例如,服务器中的大多数全局互斥锁是单例的,因此相应的工具也是如此。
      • user:该工具与用户工作负载(而不是系统工作负载)直接相关。一种这样的工具是wait/io/socket/sql/client_connection
    • VOLATILITY

      仪器波动率。波动率值范围从低到高。这些值对应于头文件中定义的常量:PSI_VOLATILITY_xxxmysql/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_instruments
      SET ENABLED=value
      WHERE NAME = 'wait/synch/mutex/sql/THD::LOCK_query_plan';
      

      该语句实际上完全无效:

      UPDATE performance_schema.setup_instruments
      SET ENABLED=value
      WHERE NAME = 'wait/synch/mutex/pfs/LOCK_pfs_share_list';
      

      此互斥锁是永久的,并且已在执行更新之前创建。互斥锁不会再创建,因此ENABLEDin中的值setup_instruments将永远不会使用。要启用或禁用此互斥锁,请改用该mutex_instances表。

    • DOCUMENTATION

      描述仪器用途的字符串。NULL如果没有描述可用,则为该值。

    setup_instruments表具有以下索引:

    • NAME)上的主键

    TRUNCATE TABLE不允许用于该setup_instruments表。