setup_instruments 与Setup_consumers介绍

来源:这里教程网 时间:2026-03-01 18:26:56 作者:

setup_instruments

Instruments 是不同组件集的组合,例如wait、io、sql、binlog、file等。如果我们将这些组件组合起来,它们将成为帮助我们解决不同问题的有意义的工具。例如,wait/io/file/sql/binlog是提供有关二进制日志文件的等待和 I/O 详细信息的工具之一。Instruments从左侧读取,然后组件将添加分隔符“/”。我们添加到Instruments中的组件越多,它就会变得越复杂或越具体,即Instruments越长,它就越复杂。

以下是详细的 instru ments 分类及项目说明:

一级

二级

说明

三级

说明

wait

: 统计各种等待事件

sync

与同步相关的等待

mutex

wait /sync/mutex:

Mutex 是代码中使用的一种同步机制,用于强制规定在特定时间内只有一个线程可以访问某些公共资源。该资源被称为受到 mutex " 保护 " 当服务器中执行的两个线程(例如,同时执行查询的两个用户会话)需要访问同一资源(文件、缓冲区或某些数据)时,这两个线程会相互竞争,因此,第一个获得互斥锁的查询会导致另一个查询等待,直到第一个查询完成并解锁互斥锁。

rwlock

普通读 / 写锁对象,用于锁定特定变量的访问,同时防止其他线程使用该变量。共享读锁可由多个线程同时获取。独占写锁每次只能由一个线程获取。

prlock

一个优先级为 rwlock 的锁对象。

sxlock

共享独占( SX)锁是一种 rwlock 锁对象,它提供对公共资源的写访问权限,同时允许其他线程进行不一致的读取。SX 锁可优化并发性,提高读写工作负载的可扩展性。

cond

一个或者多个进程 / 线程在等待一个特定条件的发生才能继续运行。 条件是代码中的一种同步机制,用于发出特定事件已发生的信号,该信号指示等待该条件的线程可以继续工作。 目前有 以下几个 组:sql - 与复制和Advance处理任务相关的条件

mysys :与 MySQL 低级内部功能相关的条件

innodb - innodb 引擎功能有关的条件,如提交、回滚等。

myisam: my isam 引擎相关的条件

m ysqlx: X Plugin 相关的条件

io

IO相关的等待

file

被采集 的文件 I/O 操作。对于文件,等待是指等待文件操作完成的时间(例如,调用 fwrite())。由于缓存的原因,磁盘上的物理文件 I/O 可能不会在这次调用中实际发生。如: wait/io/file/innodb/innodb_data_file

table

被采集的表 I/O 操作。这些操作包括对持久基表或临时表的行级访问。影响行的操作包括获取、插入、更新和删除。对于视图,等待与视图引用的基础表相关联。如: wait/io/table/sql/handler

socket

被采集的 socket操作。 socket instrument 的名称格式为 wait/io/socket/sql/socket_type。服务器支持的每个网络协议都有一个监听 socket 。与 TCP/IP 或 Unix 套接字文件连接的监听socket相关的  instrument ,其 socket_type值分别为 server_tcpip_socket 或 server_unix_socket。

wait/io/socket/sql/server_tcpip_socket

wait/io/socket/sql/server_unix_socket

当监听 socket 检测到连接时,服务器会将连接转移到由单独线程管理的新 socket 上。新连接线程的 instrument socket_type 值为 client_connection。如:  wait/io/socket/sql/client_connection

lock

与锁相关的等待

table

TABLE 锁相关的instrument ,如:  wait/lock/table/sql/handler

metadata

metadata_lock相关的instrument ,如 wait/lock/metadata/sql/mdl

idle : 有关 socket连接的信息以及与线程相关的信息

只有一个, 空闲事件相关的instrument

stage

: 表示语句的每个执行阶段的统计

sql

  stage/code_area/stage_name, 其中 code_area 是一个值,如 sql 或 myisam,而 stage_name 表示语句处理的阶段,如排序结果或发送数据。阶段与 SHOW PROCESSLIST 显示的或信息模式 PROCESSLIST 表中可见的线程状态相对应。

sql表示

mysys

MySQL 的低级实用程序

innodb

innod b的各个阶段

group_rpl

statement

: 统计语句维度的信息

sql

  SQL 语句操作。例如,statement/sql/create_db 和 statement/sql/select 用于 CREATE DATABASE 和 SELECT 语句。

abstract

用于语句分类的早期阶段,当时还不知道确切的语句类型,当知道类型后,再改为更具体的语句工具。

sp

存储程序执行的内部指令。例如,statement/sp/cfetch 和 statement/sp/freturn 用于光标获取和函数返回指令。

scheduler

statement/scheduler/event:跟踪事件调度程序执行的所有事件的单一 instrument 。该 instrument 在计划事件开始执行时发挥作用。

com

这些 instrument 的名称与 COM_xxx 操作相对应(参见 mysql_com.h 头文件和 sql/sql_parse.cc)。例如,statement/com/Connect 和 statement/com/Init DB 工具对应 COM_CONNECT 和 COM_INIT_DB 命令。

transaction

: 事务相关信息

 

只有一个, 事务相关的instrument

memory :统计在各个组件上的 内存使用情况的信息 , 名称格式为 memory/code_area/instrument_name ,其中 code_area 为诸如 sql 或 myisam 的值,instrument_name 为工具详细信息。

 

performance_schema

performance_schema引擎占用的内存

sql

  SQL 语句操作占用的内存

client

Clinet组件 占用的内存

vio

vio占用的内存,VIO主要是用在了网络通信Socket中的数据结构的封装

mysys

MySQL 的低级实用程序占用的内存

refcache

reference cache 占用的内存

mysqld_openssl

openssl 占用的内存

csv

csv引擎占用的内存

innodb

innodb 引擎占用的内存

myisam

myisam 引擎占用的内存

memory

memory 引擎占用的内存

myisammrg

MRG _MyISAM 引擎占用的内存

temptable

TempTable引擎占用的内存

archive

innodb 引擎占用的内存

blackhole

innodb 引擎占用的内存

mysqlx

mysqlx 组件占用的内存

component_sys_vars

system_variables 组件占用的内存

error 与用户活动产生的 errors相关的信息

只有一个, 错误信息相关的instrument

 

 

Setup_consumers

收集的 event 信息写入的表,修改该表实时生效,默认 history 表记录 10 个事件, history_long 表记录 10000 个事件。

setup_consumers 中的表之间的依赖关系如下:

 

其中, global_instrumentation 是最高的级别的消费者。如果 global_instrumentation 设置为 "NO",则会禁用全局instrument。所有其他表的set up 都是较低级别的,不会被检查;设置为什么也无关紧要。如果 global_instrumentation 设置为 "YES", per formanc e_schema 将维护全局状态信息,并检查 thread_instrumentation 消费者。

只有当 global_instrumentation 为 " YES  "时,才会检查 thread_instrumentation。否则,如果 thread_instrumentation 为 NO,则会禁用特定于线程的instrument,并忽略所有低级设置。每个线程不会保存任何信息,也不会在 current-events 或 event-history 表中收集单个事件。如果 thread_instrumentation 为 "YES",per formanc e_schema会维护特定于线程的信息,并检查 events_xxx_current 消费者。

global_instrumentation和  thread_instrumentation 同时设置为 “YES”时,才会继续检查下一层的消费者。以此类推。

从以上图中可以看出 event _xxx_current event _xxx_ history   event _xxx_ history _long 的上一级。其也决定着下一层。 xxx ”包括wait s,stages,statements transactions。

其中, events_statements_cpu,如果为 "NO",则禁止测量 CPU_TIME。如果为 " YeS ",且instrumentation已启用并计时,则会测量 CPU_TIME。

statements_digest 语句摘要消费者要求 global_instrumentation 为 " YES ",否则不会进行检查。 statements_digest 消费者不依赖于 statements_ event消费者,因此无需在 events_statements_current 中收集统计数据,就能获得每个摘要的统计数据。反之,也可以在 events_statements_current 中获取详细语句,而无需摘要(此时 DIGEST 和 DIGEST_TEXT 列为空)

相关推荐