工具名称由一系列元素组成,这些元素由 '/'
字符分隔。名称示例
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
errors
工具命名空间具有树状结构。工具名称中从左到右的元素表示从更通用到更具体的进展。名称具有的元素数量取决于工具的类型。
名称中给定元素的解释取决于其左侧的元素。例如,myisam
出现在以下两个名称中,但第一个名称中的 myisam
与文件 I/O 相关,而第二个名称中的 myisam
与同步工具相关
wait/io/file/myisam/log
wait/synch/cond/myisam/MI_SORT_INFO::cond
工具名称由一个前缀和一个后缀组成,前缀的结构由性能模式实现定义,后缀由实现工具代码的开发者定义。工具前缀的顶级元素表示工具的类型。此元素还确定 performance_timers
表中的哪个事件计时器适用于该工具。对于工具名称的前缀部分,顶级表示工具的类型。
工具名称的后缀部分来自工具本身的代码。后缀可能包括以下级别
主要元素的名称(服务器模块,如
myisam
、innodb
、mysys
或sql
)或插件名称。代码中变量的名称,格式为
XXX
(全局变量)或
(类CCC
::MMM
CCC
中的成员MMM
)。例如:COND_thread_cache
、THR_LOCK_myisam
、BINLOG::LOCK_index
。
idle
:已检测的空闲事件。此工具没有其他元素。error
:已检测的错误事件。此工具没有其他元素。memory
:已检测的内存事件。stage
:已检测的阶段事件。statement
:已检测的语句事件。transaction
:已检测的事务事件。此工具没有其他元素。wait
:已检测的等待事件。
idle
工具用于空闲事件,性能模式生成这些事件,如 第 29.12.3.5 节“socket_instances 表” 中对 socket_instances.STATE
列的描述中所述。
error
工具指示是否收集服务器错误和警告的信息。默认情况下启用此工具。 setup_instruments
表中 error
行的 TIMED
列不适用,因为不收集计时信息。
默认情况下启用内存检测。可以通过更新 setup_instruments
表中相关工具的 ENABLED
列,在启动时或在运行时动态启用或禁用内存检测。内存工具的名称格式为 memory/
,其中 code_area
/instrument_name
code_area
是一个值,例如 sql
或 myisam
,而 instrument_name
是工具详细信息。
以 memory/performance_schema/
为前缀的 Instruments 公开了性能模式中为内部缓冲区分配了多少内存。memory/performance_schema/
Instruments 是内置的,始终启用,并且无法在启动或运行时禁用。内置内存 Instruments 仅显示在 memory_summary_global_by_event_name
表中。有关更多信息,请参阅第 29.17 节 “性能模式内存分配模型”。
阶段 Instruments 的名称格式为 stage/
,其中 code_area
/stage_name
code_area
是诸如 sql
或 myisam
之类的值,而 stage_name
指示语句处理的阶段,例如 正在排序结果
或 正在发送数据
。阶段对应于 SHOW PROCESSLIST
显示的线程状态或 Information Schema PROCESSLIST
表中可见的线程状态。
statement/abstract/*
:用于语句操作的抽象 Instrument。抽象 Instruments 在语句分类的早期阶段(即在知道确切的语句类型之前)使用,然后在知道类型后更改为更具体的语句 Instrument。有关此过程的说明,请参阅第 29.12.6 节 “性能模式语句事件表”。statement/com
:已检测的命令操作。它们的名称对应于COM_
操作(请参阅xxx
mysql_com.h
头文件和sql/sql_parse.cc
)。例如,statement/com/Connect
和statement/com/Init DB
Instruments 对应于COM_CONNECT
和COM_INIT_DB
命令。statement/scheduler/event
:用于跟踪事件调度程序执行的所有事件的单个 Instrument。此 Instrument 在计划事件开始执行时起作用。statement/sp
:由存储程序执行的已检测内部指令。例如,statement/sp/cfetch
和statement/sp/freturn
Instruments 用于游标提取和函数返回指令。statement/sql
:已检测的 SQL 语句操作。例如,statement/sql/create_db
和statement/sql/select
Instruments 用于CREATE DATABASE
和SELECT
语句。
已检测的线程显示在 setup_threads
表中,该表公开了线程类名称和属性。
线程 Instruments 以 thread
开头(例如,thread/sql/parser_service
或 thread/performance_schema/setup
)。
ndbcluster
插件线程的线程 Instruments 名称以 thread/ndbcluster/
开头;有关这些内容的更多信息,请参阅ndbcluster 插件线程。
wait/io
已检测的 I/O 操作。
wait/io/file
已检测的文件 I/O 操作。对于文件,等待时间是等待文件操作完成的时间(例如,对
fwrite()
的调用)。由于缓存,磁盘上的物理文件 I/O 可能不会在此调用中发生。wait/io/socket
已检测的套接字操作。套接字 Instruments 的名称格式为
wait/io/socket/sql/
。服务器为其支持的每个网络协议都有一个侦听套接字。与 TCP/IP 或 Unix 套接字文件连接的侦听套接字关联的 Instruments 的socket_type
socket_type
值分别为server_tcpip_socket
或server_unix_socket
。当侦听套接字检测到连接时,服务器会将连接传输到由单独线程管理的新套接字。新连接线程的 Instrument 的socket_type
值为client_connection
。wait/io/table
已检测的表 I/O 操作。这些操作包括对持久基表或临时表的行级访问。影响行的操作有提取、插入、更新和删除。对于视图,等待与视图引用的基表相关联。
与大多数等待不同,表 I/O 等待可以包含其他等待。例如,表 I/O 可能包括文件 I/O 或内存操作。因此,
events_waits_current
对于表 I/O 等待通常有两行。有关更多信息,请参阅第 29.8 节 “性能模式原子和分子事件”。某些行操作可能会导致多个表 I/O 等待。例如,插入可能会激活触发更新的触发器。
wait/lock
已检测的锁操作。
wait/lock/table
已检测的表锁操作。
wait/lock/metadata/sql/mdl
已检测的元数据锁操作。
wait/synch
已检测的同步对象。对于同步对象,
TIMER_WAIT
时间包括尝试获取对象上的锁时阻塞的时间(如果有)。wait/synch/cond
条件由一个线程使用,用于向其他线程发送信号,表明它们正在等待的事情已经发生。如果单个线程正在等待某个条件,则它可以唤醒并继续执行。如果有多个线程正在等待,则它们都可以唤醒并竞争它们正在等待的资源。
wait/synch/mutex
互斥对象,用于允许访问资源(例如可执行代码段),同时防止其他线程访问该资源。
wait/synch/prlock
优先级 读写锁 对象。
wait/synch/rwlock
一个普通的 读写锁 对象,用于锁定特定变量以供访问,同时防止其他线程使用它。共享读锁可以由多个线程同时获取。独占写锁一次只能由一个线程获取。
wait/synch/sxlock
共享-独占 (SX) 锁是一种 读写锁 对象,它提供对公共资源的写访问权限,同时允许其他线程进行不一致的读取。
sxlocks
优化了并发性并提高了读写工作负载的可扩展性。