29.6 性能模式检测信号命名约定
仪器名称由一系列元素组成,通过 '/'
字符分隔。示例名称:
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相关,而在第二个名称中则与同步仪器相关:
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
仪器用于空闲事件,这些事件由性能模式在 Section 29.12.3.5, “The socket_instances Table” 中讨论的描述中生成。
error
仪器指示是否收集服务器错误和警告的信息。这类仪器默认启用。TIMED
列在 setup_instruments
表中的 error
行上是无效的,因为没有收集时间信息。
内存性能监控默认启用。可以在启动时或运行时通过更新setup_instruments
表中的相关性能监控器的ENABLED
列来启用或禁用内存性能监控。内存性能监控器的名称以memory/
code_area
/instrument_name
的形式出现,其中code_area
可能是如sql
或myisam
这样的值,instrument_name
是性能监控器的详细信息。
以memory/performance_schema/
开头的性能监控器显示了Performance Schema内部缓冲区分配的内存使用情况。这些性能监控器是内置的,始终启用,不可以在启动时或运行时禁用。内置的内存性能监控器仅在memory_summary_global_by_event_name
表中显示。有关更多信息,请参阅第29.17节,“Performance Schema内存分配模型”。
阶段性能监控器的名称以stage/
code_area
/stage_name
的形式出现,其中code_area
可能是如sql
或myisam
这样的值,stage_name
表示语句处理的阶段,如Sorting result
或Sending data
。阶段对应于SHOW PROCESSLIST
显示的线程状态或信息Schema中的PROCESSLIST
表中可见的状态。
-
statement/abstract/*
:用于语句操作的抽象性能监控器。抽象性能监控器在语句类型未知时使用,在知道类型后更改为更具体的语句性能监控器。当了解到具体类型时,会从一个更具体的语句性能监控器转换过来。有关此过程的描述,请参阅第29.12.6节,“Performance Schema语句事件表”。 -
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
语句。
性能监控的线程显示在setup_threads
表中,该表公开了线程类别名称和属性。
线程性能监控器以thread/
开头(例如,thread/sql/parser_service
或thread/performance_schema/setup
)。
线程工具的名称对于 ndbcluster
插件线程以 thread/ndbcluster/
开头;有关这些信息,请参阅 ndbcluster 插件线程。
-
wait/io
一个被监控的I/O操作。
-
wait/io/file
一个被监控的文件I/O操作。对于文件,等待时间是指文件操作完成前的等待时间(例如,
fwrite()
的调用)。由于缓存,物理文件在磁盘上的I/O可能不会在这个调用内发生。 -
wait/io/socket
一个被监控的套接字操作。套接字工具的名称形式为
wait/io/socket/sql/
。服务器对于每种网络协议都有一个监听套接字。与TCP/IP或Unix套接字文件连接相关的监听套接字的工具,socket_type
socket_type
值为server_tcpip_socket
或server_unix_socket
。当一个监听套接字检测到一个连接时,服务器将该连接转移到由单独线程管理的新套接字中。与新连接线程相关的工具,其socket_type
值为client_connection
。 -
wait/io/table
一个被监控的表I/O操作。这些包括对持久性基础表或临时表的行级访问。影响行的操作是fetch、insert、update和delete。对于视图,等待与其引用视图中基表相关联的基表有关。
与大多数等待不同,表I/O等待可能包括其他等待。例如,表I/O可能包括文件I/O或内存操作。因此,
events_waits_current
对于表I/O等待通常有两个行。有关更多信息,请参阅 第29.8节,“性能_schema原子和分子事件”。某些行操作可能会导致多个表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
一个优先级 rwlock 锁对象。
-
wait/synch/rwlock
一个普通的 读/写锁 对象,用于在访问特定变量时锁定该变量以防止其他线程使用。共享读锁可以被多个线程同时获得。独占写锁只能由一个线程同时持有。
-
wait/synch/sxlock
一个共享-排他(SX)锁是 rwlock 锁对象的类型,它为公共资源提供写访问权限,同时允许其他线程进行不一致读取。
sxlocks
优化并提高了对于读-写工作负载的可扩展性。
-