25.6 Performance Schema 仪器命名约定
乐器名称由一系列由'/'
个字符分隔的组件组成。示例名称:
wait/io/file/myisam/log
wait/io/file/mysys/charset
wait/lock/table/sql/handler
wait/synch/cond/mysys/COND_alarm
wait/synch/cond/sql/BINLOG::update_cond
wait/synch/mutex/mysys/BITMAP_mutex
wait/synch/mutex/sql/LOCK_delete
wait/synch/rwlock/sql/Query_cache_query::lock
stage/sql/closing tables
stage/sql/Sorting result
statement/com/Execute
statement/com/Query
statement/sql/create_table
statement/sql/lock_tables
乐器名称空间具有树状结构。乐器名称的组成从左到右提供了从更一般到更具体的过程。名称具有的组件数量取决于仪器的类型。
名称中给定组件的解释取决于其左侧的组件。例如,以下两个名称中都出现了myisam
,但是第一个名称中的myisam
与文件 I/O 有关,而第二个名称中的myisam
与同步工具有关:
wait/io/file/myisam/log
wait/synch/cond/myisam/MI_SORT_INFO::cond
乐器名称由具有性能模式实现定义的结构的前缀和由实现乐器代码的开发人员定义的后缀组成。仪器前缀的顶级组件指示仪器的类型。此组件还确定setup_timers
table 中的哪个事件计时器适用于该乐器。对于乐器名称的前缀部分,顶层指示乐器的类型。
仪器名称的后缀部分来自仪器本身的代码。后缀可能包括以下级别:
-
主要组件的名称(服务器模块,例如
myisam
,innodb
,mysys
或sql
)或插件名称。 -
代码中变量的名称,格式为*
XXX
(全局变量)或CCC::MMM
(成员MMM
类CCC
*)。示例:COND_thread_cache
,THR_LOCK_myisam
,BINLOG::LOCK_index
。
顶级乐器组件
-
idle
:检测到的空闲事件。该仪器没有其他组件。 -
memory
:检测到的内存事件。 -
stage
:舞台演出事件。 -
statement
:检测语句事件。 -
transaction
:有条件的 Transaction 事件。该仪器没有其他组件。 -
wait
:检测到的 await 事件。
空闲的仪器组件
idle
工具用于空闲事件,性能模式会生成这些空闲事件,如第 25.12.3.5 节“ socket_instancestable”中的socket_instances.STATE
列的描述中所述。
内存仪器组件
默认情况下,大多数内存检测都是禁用的,并且可以在启动时启用或禁用,或者在运行时通过更新setup_instrumentstable 中相关工具的ENABLED
列来动态启用或禁用。内存仪器的名称格式为memory/code_area/instrument_name
,其中* code_area
是诸如sql
或myisam
的值,而 instrument_name
*是仪器详细信息。
前缀为memory/performance_schema/
的乐器会公开为性能架构中的内部缓冲区分配多少内存。 memory/performance_schema/
仪器是内置的,始终启用,并且无法在启动或运行时禁用。内置存储工具仅显示在memory_summary_global_by_event_nametable 中。有关更多信息,请参见第 25.17 节“性能模式内存分配模型”。
舞台乐器组件
阶段工具的名称格式为stage/code_area/stage_name
,其中* code_area
*是诸如sql
或myisam
的值,而stage_name
*table 示语句处理的阶段,例如Sorting result
或Sending data
。阶段对应于SHOW PROCESSLIST显示或在INFORMATION_SCHEMA.PROCESSLISTtable 中可见的线程状态。
声明工具组件
-
statement/abstract/*
:语句操作的抽象工具。在语句分类的早期阶段使用抽象工具,然后才知道确切的语句类型,然后在知道类型的情况下将其更改为更具体的语句工具。有关此过程的说明,请参见第 25.12.6 节“性能架构语句事件 table”。 -
statement/com
:已执行命令的操作。它们具有与COM_xxx
操作相对应的名称(请参见mysql_com.h
头文件和sql/sql_parse.cc
。例如,statement/com/Connect
和statement/com/Init DB
仪器对应于COM_CONNECT
和COM_INIT_DB
命令。 -
statement/scheduler/event
:一种用于跟踪事件计划程序执行的所有事件的工具。当计划的事件开始执行时,该乐器开始起作用。 -
statement/sp
:由存储的程序执行的检测内部指令。例如,使用statement/sp/cfetch
和statement/sp/freturn
工具来获取游标和函数返回指令。 -
statement/sql
:有条件的 SQL 语句操作。例如,statement/sql/create_db
和statement/sql/select
工具用于CREATE DATABASE和SELECT语句。
await 仪器组件
wait/io
仪 table 化的 I/O 操作。
wait/io/file
已检测文件 I/O 操作。对于文件,await 时间是 await 文件操作完成的时间(例如,对fwrite()
的调用)。由于进行了缓存,因此在此调用中可能不会发生磁盘上的物理文件 I/O。
wait/io/socket
仪器化的套接字操作。socket 乐器的名称格式为wait/io/socket/sql/socket_type
。服务器为它支持的每个网络协议都有一个侦听套接字。与用于 TCP/IP 或 Unix 套接字文件连接的侦听套接字关联的工具的* socket_type
值分别为server_tcpip_socket
或server_unix_socket
。当侦听套接字检测到连接时,服务器会将连接转移到由单独线程 Management 的新套接字。新连接线程的工具的 socket_type
*值为client_connection
。
wait/io/table
仪 table 化的 tableI/O 操作。其中包括对持久基 table 或临时 table 的行级访问。影响行的操作是获取,插入,更新和删除。对于视图,await 与视图引用的基 table 相关联。
与大多数 await 不同,tableI/Oawait 可以包括其他 await。例如,tableI/O 可能包括文件 I/O 或内存操作。因此,tableI/Oawait 的events_waits_current通常有两行。有关更多信息,请参见第 25.8 节“性能架构原子和分子事件”。
某些行操作可能会导致多个 tableI/Oawait。例如,插入可能会激活导致更新的触发器。
wait/lock
仪 table 锁定操作。
wait/lock/table
仪 table 化 table 锁定操作。
wait/lock/metadata/sql/mdl
插装的元数据锁定操作。
wait/synch
检测的同步对象。对于同步对象,TIMER_WAIT
时间包括尝试获取对象上的锁(如果有)时被阻止的时间。
wait/synch/cond
一个线程使用一个条件向其他线程发出 signal,告知它们正在 await 的事情已经发生。如果单个线程正在 await 条件,则它可以唤醒并 continue 执行。如果有多个线程在 await,它们都可以唤醒并竞争他们正在 await 的资源。
wait/synch/mutex
一个互斥对象,用于允许访问资源(例如一段可执行代码),同时防止其他线程访问该资源。
wait/synch/rwlock
read/write lock对象,用于锁定要访问的特定变量,同时防止其他线程使用它。共享读取锁可以由多个线程同时获取。一次只能由一个线程获取排他写锁定。
wait/synch/sxlock
共享独占(SX)锁是一种rwlock锁对象,该对象提供对公共资源的写访问权限,同时允许其他线程进行不一致的读取。 sxlocks
优化并发性并提高可读写工作负载的可伸缩性。