暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL 8.0 Performance_Schema 数据库详解

原创 D-将军 2025-05-16
152

MySQL 8.0 Performance_Schema 数据库详解

一. 概述

Performance_Schema 是 MySQL 提供的性能监控机制,可捕获线程SQL执行内存I/O等细节信息,用于性能分析和问题诊断。默认是关闭部分监控项,可以手动开启和配置以。


✅ 1. 启动参数(my.cnf / my.ini)

你可以在配置文件中添加如下内容:

 [mysqld]
 performance_schema = ON
 performance_schema_instrument = '%=ON'
  • performance_schema = ON:启用性能模式(MySQL 5.6+ 默认开启)

  • performance_schema_instrument = '%=ON':开启所有事件采集(也可选择性启用)

重启 MySQL 服务生效:

 sudo systemctl restart mysql

✅ 2. 启用监控项目(仪器、消费者)

通过如下 SQL 命令启用或配置监控内容:

(1)查看哪些监控项可用:

 SELECT * FROM performance_schema.setup_instruments WHERE NAME LIKE 'wait/io/file/%';

(2)启用某个监控项(如文件 I/O):

 UPDATE performance_schema.setup_instruments
 SET ENABLED = 'YES', TIMED = 'YES'
 WHERE NAME = 'wait/io/file/sql/handler';

(3)启用消费者(决定哪些数据表启用):

 UPDATE performance_schema.setup_consumers
 SET ENABLED = 'YES'
 WHERE NAME = 'events_statements_history';

✅ 常用的消费者包括:

消费者表名功能
events_statements_current当前语句
events_statements_history每线程最近N条语句
events_statements_history_long全局语句历史(慢查询常用)
events_waits_current当前等待
events_transactions_current当前事务监控

✅ 3. 设置历史记录条数(必须在启动前配置)

 [mysqld]
 performance_schema_events_statements_history_size = 10
 performance_schema_events_statements_history_long_size = 100

含义:

  • ..._history_size:每线程保存最近 N 条事件

  • ..._history_long_size:全局保存 N 条事件

这些参数只能在 MySQL 启动时生效,不能在线修改。

✅ 4.建议配置组合(实用配置)

配置名称建议值
performance_schemaON(必须)
performance_schema_instrument = '%=ON'开启所有监控
performance_schema_events_statements_history_size10-100
performance_schema_events_statements_history_long_size100-1000
setup_consumers启用:events_statements_history..._longwaits
setup_instruments启用:wait/io/file/sql/handlerstatement/sql/%


二. 表的分类与用途归纳

类别表示例用途描述
用户/安全信息accounts, users, hosts, host_cache跟踪连接账户、用户和主机相关的性能和错误信息
事件监控events_stages*, events_statements, events_waits_, events_transactions_*捕获并汇总 SQL 语句、阶段、等待、事务的性能数据
错误/日志error_log, events_errors_summary_*汇总与账户、主机、线程等维度的错误事件
状态/变量global_status, global_variables, session_status, session_variables, variables_info实时或采样的全局/会话状态和变量值
对象/元数据metadata_locks, table_handles, table_io_waits_*锁和 I/O 等对象级别的性能细节
内存/资源memory_summary_*, setup_instruments, setup_objects跟踪内存分配和资源配置的统计和属性
锁/等待data_locks, data_lock_waits, rwlock_instances, cond_instances, mutex_instances跟踪不同类型的锁和等待事件
I/O/文件file_instances, file_summary_*文件 I/O 活动的实例和汇总
复制/高可用replication*, group, applier_与复制连接、组复制以及故障转移相关的监控
网络/Socketsocket_instances, socket_summary_*网络套接字的连接与传输统计
线程/连接threads, processlist, setup_threads线程与会话连接的统计与属性


三. 各表详细信息

下面按字母顺序列出所有113个 performance_schema 表,包含其功能分类、简介、关键列和常用用途,并附官方文档链接:

表名功能分类说明概要关键列常用用途官方文档链接
accounts连接统计按账号(user@host)记录当前连接数和累计连接数USER,HOST,CURRENT_CONNECTIONS,TOTAL_CONNECTIONS查看每个账号的连接情况官方文档
binary_log_transaction_compression_stats复制统计统计二进制日志和中继日志事务压缩的数据量,用于评估启用压缩效果LOG_TYPE,BINLOG_COMPRESS_IN_BYTES,BINLOG_COMPRESS_OUT_BYTES分析二进制日志的压缩效率官方文档
clone_progress克隆状态显示每个在线克隆操作的阶段进度(8.0.17+)SRC_ADDRESS,DST_PATH,OPERATION,STATE,MIGRATED_FILES监控克隆过程的进度官方文档
clone_status克隆状态显示当前或最后一次克隆操作的总体状态(8.0.17+)OPERATION,STATE,PROCESS_LIST_ID,CLONE_TIMEOUT查看克隆操作是否正在进行及其状态官方文档
component_scheduler_tasks调度任务列出所有注册的调度任务(组件/插件任务)NAME,STATUS,COMMENT,INTERVAL_SECONDS,TIMES_RUN,TIMES_FAILED查看当前调度任务的状态,如企业审计插件的定时刷新任务官方文档
cond_instances实例表列出所有条件变量实例(cond_mutex, cond)NAME,OBJECT_INSTANCE_BEGIN,OBJECT_INSTANCE_END查询所有内核条件对象的分配情况官方文档
data_lock_waits锁/等待显示行锁请求被哪个锁阻塞REQUESTING_THREAD_ID,REQUESTED_ENGINE_LOCK_ID,BLOCKING_THREAD_ID查找哪些锁等待被阻塞官方文档
data_locks显示当前持有和请求的行锁ENGINE,ENGINE_LOCK_ID,OBJECT_SCHEMA,OBJECT_NAME,LOCK_TYPE,LOCK_MODE,LOCK_STATUS,THREAD_ID分析当前的行锁竞争官方文档
error_log日志错误日志表(8.0.22+),记录最近的错误/警告信息LOGGED,ERROR_CODE,SUBSYSTEM,DATA以 SQL 方式查询服务器错误日志内容官方文档
events_errors_summary_by_account_by_error错误汇总按账号和错误代码汇总的错误统计USER,HOST,ERROR_NUMBER,COUNT_ERROR找出各账号发生最多错误的类型(内置汇总表)官方文档
events_errors_summary_by_host_by_error错误汇总按主机和错误代码汇总的错误统计HOST,ERROR_NUMBER,COUNT_ERROR找出各客户端主机遭遇最多错误的类型(内置汇总表)官方文档
events_errors_summary_by_thread_by_error错误汇总按线程和错误代码汇总的错误统计THREAD_ID,ERROR_NUMBER,COUNT_ERROR找出每个线程遇到的错误及次数(内置汇总表)官方文档
events_errors_summary_by_user_by_error错误汇总按用户和错误代码汇总的错误统计USER,ERROR_NUMBER,COUNT_ERROR找出各用户执行操作时出现的错误及次数(内置汇总表)官方文档
events_errors_summary_global_by_error错误汇总全局按错误代码汇总的错误统计ERROR_NUMBER,COUNT_ERROR全局统计所有错误的出现次数(内置汇总表)官方文档
events_stages_current阶段事件每线程当前执行阶段事件THREAD_ID,EVENT_ID,EVENT_NAME,STATE,TIMER_START查看当前每个线程处于哪个执行阶段官方文档
events_stages_history阶段事件每线程最近若干已结束的阶段事件THREAD_ID,EVENT_ID,EVENT_NAME,NESTING_EVENT_ID,TIMER_END查询历史阶段执行情况(如分析长运行查询的阶段划分)官方文档
events_stages_history_long阶段事件全局最近若干已结束的阶段事件THREAD_ID,EVENT_ID,EVENT_NAME,NESTING_EVENT_ID,TIMER_END查询全局范围的阶段事件历史,用于更广泛的性能分析官方文档
events_stages_summary_by_account_by_event_name阶段汇总按账号和阶段名称汇总执行次数/时间USER,EVENT_NAME,COUNT_STAR,SUM_TIMER_WAIT查看各账号在不同执行阶段的累积时间统计官方文档
events_stages_summary_by_host_by_event_name阶段汇总按主机和阶段名称汇总执行次数/时间HOST,EVENT_NAME,COUNT_STAR,SUM_TIMER_WAIT分析不同客户端主机在各阶段的性能开销官方文档
events_stages_summary_by_thread_by_event_name阶段汇总按线程和阶段名称汇总执行次数/时间THREAD_ID,EVENT_NAME,COUNT_STAR,SUM_TIMER_WAIT查看每线程在各阶段的累计耗时统计官方文档
events_stages_summary_by_user_by_event_name阶段汇总按用户和阶段名称汇总执行次数/时间USER,EVENT_NAME,COUNT_STAR,SUM_TIMER_WAIT同账号结合阶段汇总表,统计每用户各阶段耗时官方文档
events_stages_summary_global_by_event_name阶段汇总全局按阶段名称汇总执行次数/时间EVENT_NAME,COUNT_STAR,SUM_TIMER_WAIT全局统计各阶段耗时;识别影响最大的阶段事件官方文档
events_statements_current语句事件每线程当前正在执行的 SQL 语句事件THREAD_ID,EVENT_ID,EVENT_NAME,SQL_TEXT,TIMER_START实时查看各线程当前执行的 SQL官方文档
events_statements_histogram_by_digest语句汇总各库模式下按语句摘要统计延迟直方图SCHEMA_NAME,DIGEST,COUNT_STAR,SUM_TIMER_WAIT分析不同 SQL 摘要的延迟分布,用于识别异常慢查询官方文档
events_statements_histogram_global语句汇总全局按语句摘要统计延迟直方图DIGEST,COUNT_STAR,SUM_TIMER_WAIT全局分析语句摘要的延迟分布官方文档
events_statements_history语句事件每线程最近若干已结束的 SQL 语句事件THREAD_ID,EVENT_ID,EVENT_NAME,SQL_TEXT,TIMER_END回溯查询历史执行记录,用于调试特定线程的执行情况官方文档
events_statements_history_long语句事件全局最近若干已结束的 SQL 语句事件THREAD_ID,EVENT_ID,EVENT_NAME,SQL_TEXT,TIMER_END全局范围查询历史记录,可用于分析集群中各线程活动官方文档
events_statements_summary_by_account_by_event_name语句汇总按账号和语句类型汇总语句统计USER,EVENT_NAME,COUNT_STAR,SUM_TIMER_WAIT查看每用户不同语句类型的总耗时,识别哪个用户执行了最多/耗时最多查询官方文档
events_statements_summary_by_digest语句汇总按语句摘要汇总统计各 SQL 模式的执行情况SCHEMA_NAME,DIGEST_TEXT,COUNT_STAR,SUM_TIMER_WAIT列出所有 SQL 摘要和其执行次数、总耗时,用于发现慢查询热点官方文档
events_statements_summary_by_host_by_event_name语句汇总按主机和语句类型汇总语句统计HOST,EVENT_NAME,COUNT_STAR,SUM_TIMER_WAIT分析不同客户端主机在执行各类语句时的开销官方文档
events_statements_summary_by_program语句汇总按程序(源代码)汇总语句统计PROGRAM,COUNT_STAR,SUM_TIMER_WAIT统计不同客户端程序来源的 SQL 执行情况官方文档
events_statements_summary_by_thread_by_event_name语句汇总按线程和语句类型汇总语句统计THREAD_ID,EVENT_NAME,COUNT_STAR,SUM_TIMER_WAIT查看每线程在不同语句类型上的累积耗时官方文档
events_statements_summary_by_user_by_event_name语句汇总按用户和语句类型汇总语句统计USER,EVENT_NAME,COUNT_STAR,SUM_TIMER_WAIT见按账号汇总,用于查看每用户的SQL执行量官方文档
events_statements_summary_global_by_event_name语句汇总全局按语句类型汇总统计EVENT_NAME,COUNT_STAR,SUM_TIMER_WAIT全局统计各语句类型(如 SELECT/INSERT 等)的总耗时官方文档
events_transactions_current事务事件每线程当前活跃的事务事件THREAD_ID,EVENT_ID,STATE,TIMER_START查看每线程当前事务状态,如是否处于 LOCK WAIT 等官方文档
events_transactions_history事务事件每线程最近若干已结束的事务事件THREAD_ID,EVENT_ID,STATE,TIMER_END分析过去事务的状态和耗时官方文档
events_transactions_history_long事务事件全局最近若干已结束的事务事件THREAD_ID,EVENT_ID,STATE,TIMER_END全局范围分析事务事件历史官方文档
events_transactions_summary_by_account_by_event_name事务汇总按账号和事务类型汇总统计USER,EVENT_NAME,COUNT_STAR,SUM_TIMER_WAIT查看各用户在不同事务类型上的累积耗时官方文档
events_transactions_summary_by_host_by_event_name事务汇总按主机和事务类型汇总统计HOST,EVENT_NAME,COUNT_STAR,SUM_TIMER_WAIT查看各客户端主机在不同事务类型上的开销官方文档
events_transactions_summary_by_thread_by_event_name事务汇总按线程和事务类型汇总统计THREAD_ID,EVENT_NAME,COUNT_STAR,SUM_TIMER_WAIT查看每线程在不同事务类型上的累积耗时官方文档
events_transactions_summary_by_user_by_event_name事务汇总按用户和事务类型汇总统计USER,EVENT_NAME,COUNT_STAR,SUM_TIMER_WAITevents_transactions_summary_by_account_by_event_name官方文档
events_transactions_summary_global_by_event_name事务汇总全局按事务类型汇总统计EVENT_NAME,COUNT_STAR,SUM_TIMER_WAIT全局统计各种事务类型(COMMIT/ROLLBACK)总耗时官方文档
events_waits_current等待事件每线程当前正在等待的事件(如锁、IO 等)THREAD_ID,EVENT_ID,EVENT_NAME,TIMER_START查看每线程当前因何种事件而等待官方文档
events_waits_history等待事件每线程最近若干已结束的等待事件THREAD_ID,EVENT_ID,EVENT_NAME,TIMER_END分析过去的等待事件(如锁等待)官方文档
events_waits_history_long等待事件全局最近若干已结束的等待事件THREAD_ID,EVENT_ID,EVENT_NAME,TIMER_END全局范围历史等待事件分析官方文档
events_waits_summary_by_account_by_event_name等待汇总按账号和事件类型汇总等待统计USER,EVENT_NAME,COUNT_STAR,SUM_TIMER_WAIT查看各用户不同等待事件的总耗时官方文档
events_waits_summary_by_host_by_event_name等待汇总按主机和事件类型汇总等待统计HOST,EVENT_NAME,COUNT_STAR,SUM_TIMER_WAIT查看各主机不同等待事件的总耗时官方文档
events_waits_summary_by_instance等待汇总按资源实例汇总等待统计OBJECT_INSTANCE_BEGIN,COUNT_STAR,SUM_TIMER_WAIT查看不同资源实例(如表或文件)上的等待时间官方文档
events_waits_summary_by_thread_by_event_name等待汇总按线程和事件类型汇总等待统计THREAD_ID,EVENT_NAME,COUNT_STAR,SUM_TIMER_WAIT查看每线程不同等待事件的总耗时官方文档
events_waits_summary_by_user_by_event_name等待汇总按用户和事件类型汇总等待统计USER,EVENT_NAME,COUNT_STAR,SUM_TIMER_WAITevents_waits_summary_by_account_by_event_name官方文档
events_waits_summary_global_by_event_name等待汇总全局按事件类型汇总等待统计EVENT_NAME,COUNT_STAR,SUM_TIMER_WAIT找出总体耗时最多的等待事件(除空闲外)官方文档
file_instances实例表列出所有被监控的文件实例FILE_NAME,OBJECT_INSTANCE_BEGIN,COUNT_OPEN查看系统打开了哪些文件及使用的 Instrument官方文档
file_summary_by_event_nameI/O汇总按文件 I/O 事件类型汇总读写字节数EVENT_NAME,SUM_NUMBER_OF_BYTES_READ,SUM_NUMBER_OF_BYTES_WRITE分析哪种 I/O 操作最耗时官方文档
file_summary_by_instanceI/O汇总按文件实例汇总读写字节数FILE_NAME,SUM_NUMBER_OF_BYTES_READ,SUM_NUMBER_OF_BYTES_WRITE找出读写字节最多的文件官方文档
firewall_group_allowlist安全 (防火墙)MySQL 企业防火墙:列出允许规则列表(8.0.23+)GROUP_ID,MATCH_TYPE,SCHEMA_NAME,TABLE_NAME,COLUMN_NAME审查某防火墙组的放行规则官方文档
firewall_groups安全 (防火墙)企业防火墙:列出防火墙组配置GROUP_ID,NAME,ACTION,STATE查看已定义的防火墙组及其状态官方文档
firewall_membership安全 (防火墙)企业防火墙:列出用户和防火墙组的对应关系(8.0.23+)GROUP_ID,USER,HOST,ROLE_NAME查看哪些用户属于哪个防火墙组官方文档
global_status状态统计当前全局状态变量值VARIABLE_NAME,VARIABLE_VALUE获取服务器全局状态指标(如线程数、缓冲池命中率等)官方文档
global_variables系统变量当前全局系统变量值VARIABLE_NAME,VARIABLE_VALUE查看服务器当前全局参数配置官方文档
host_cache杂项 (Host)内存中 DNS 主机缓存IP,HOST,VALID,TIMESTAMP,COUNT_CONNECTIONS诊断主机解析问题,查看哪些 IP 解析结果缓存官方文档
hosts连接统计按客户端主机记录当前和总连接数HOST,CURRENT_CONNECTIONS,TOTAL_CONNECTIONS查看每个客户端主机的连接数官方文档
innodb_redo_log_files杂项 (Redo 日志)InnoDB 重做日志文件信息REDO_FILE_ID,NAME,SIZE,ENCRYPTION查看所有 InnoDB 重做日志文件详情官方文档
keyring_component_status安全 (Keyring)Keyring 状态(8.0.24+),显示加密组件工作状态NAME,COMPONENT_NAME,STATUS,INITIALIZED检查加密键存储组件是否正常运行官方文档
keyring_keys安全 (Keyring)Keyring 中所有密钥元数据(8.0.16+)ID,OWNER,KEY_ID,KEY_TYPE,ALGORITHM列出当前所有存储的加密密钥官方文档
log_status杂项 (备份)在线备份时使用的二进制日志/GTID 位点FILE_ENCRYPTION_MODE,ENABLE_BINLOG,GTIDMySQL Enterprise Backup 使用,用于备份脚本查询日志位置官方文档
memory_summary_by_account_by_event_name内存汇总按账号和事件类别汇总内存使用统计USER,EVENT_NAME,SUM_NUMBER_OF_BYTES_USED查看每个用户在各种操作(SELECT, INSERT 等)中使用的内存官方文档
memory_summary_by_host_by_event_name内存汇总按主机和事件类别汇总内存使用统计HOST,EVENT_NAME,SUM_NUMBER_OF_BYTES_USED查看各客户端主机不同操作的内存消耗官方文档
memory_summary_by_thread_by_event_name内存汇总按线程和事件类别汇总内存使用统计THREAD_ID,EVENT_NAME,SUM_NUMBER_OF_BYTES_USED查看每线程不同操作分配的内存官方文档
memory_summary_by_user_by_event_name内存汇总按用户和事件类别汇总内存使用统计USER,EVENT_NAME,SUM_NUMBER_OF_BYTES_USEDmemory_summary_by_account... 用于按用户名统计官方文档
memory_summary_global_by_event_name内存汇总全局按事件类别汇总内存使用统计EVENT_NAME,SUM_NUMBER_OF_BYTES_USED查看全局范围内各事件类型的内存总使用量官方文档
metadata_locks当前元数据锁信息(如 DDL 锁)OBJECT_TYPE,OBJECT_SCHEMA,OBJECT_NAME,THREAD_ID,LOCK_STATUS诊断数据库/表级锁争用官方文档
mutex_instances实例表列出所有互斥量实例(mutex)NAME,OBJECT_INSTANCE_BEGIN,OBJECT_INSTANCE_END查询服务器使用的内核互斥锁实例官方文档
ndb_sync_excluded_objectsNDB 同步列出 NDB 集群中不被自动同步的对象(集群模式)OBJECT_TYPE,OBJECT_SCHEMA,OBJECT_NAMENDB Cluster 同步监控官方文档
ndb_sync_pending_objectsNDB 同步列出 NDB 集群中待同步的对象OBJECT_TYPE,OBJECT_SCHEMA,OBJECT_NAMENDB Cluster 同步监控官方文档
objects_summary_global_by_type杂项全局按对象类型汇总统计OBJECT_TYPE,COUNT_STAR,SUM_TIMER_WAIT统计全局范围内不同对象类型(如 LOCK, TABLE 等)的计数和总耗时官方文档
performance_timers实例表列出所有内置定时器状态(高精度时间基准)NAME,START,END,ELAPSED查看计时器分辨率和溢出次数官方文档
persisted_variables系统变量显示 mysqld-auto.cnf 中持久化的全局系统变量VARIABLE_NAME,VARIABLE_VALUE查看已持久化的系统变量(如设置 LOAD 的全局变量)官方文档
prepared_statements_instances会话监控列出当前会话中预处理语句的信息THREAD_ID,OBJECT_INSTANCE_BEGIN,OBJECT_INSTANCE_END,STATEMENT_ID监控当前活跃的预处理语句官方文档
processlist线程/会话当前活动连接会话列表(类似 INFORMATION_SCHEMA.PROCESSLIST)ID,USER,HOST,DB,COMMAND,TIME,STATE监控当前连接状态,如查询运行时间和状态官方文档
replication_applier_configuration复制复制过滤配置:包括忽略或处理的库/表列表CHANNEL_NAME,FILTER_TYPE,DB,TABLE_NAME查看复制通道中设置的库/表过滤规则官方文档
replication_applier_filters复制复制过滤条件的详细列表FILTER_TYPE,DB_PATTERN,TABLE_PATTERN分析复制时指定的过滤条件(例如忽略 binlog 事件)官方文档
replication_applier_global_filters复制全局复制过滤器列表FILTER_TYPE,FILTER_RULE列出应用于所有复制通道的全局过滤规则官方文档
replication_applier_status复制复制通道的当前状态CHANNEL_NAME,SERVICE_STATE,SQL_DELAY,SQL_LAST_ERROR查看复制线程的运行状态(正在复制、延迟、错误信息等)官方文档
replication_applier_status_by_coordinator复制复制协调器线程的状态WORKER_ID,SERVICE_STATE,SQL_DELAY多源复制时检查协调线程状态官方文档
replication_applier_status_by_worker复制复制工作线程的状态WORKER_ID,SERVICE_STATE,SQL_DELAY,TRANSACTION_ID多线程复制时查看各 worker 线程状态官方文档
replication_asynchronous_connection_failover复制异步复制连接自动故障转移配置FAILOVER_ID,SOURCE_INDEX,PRIORITY查看自动切换(Failover)配置的连接优先级官方文档
replication_asynchronous_connection_failover_managed复制管理的故障转移状态FAILOVER_ID,STATE,FAILOVER_COUNT查看正在进行的异步连接自动故障转移官方文档
replication_connection_configuration复制复制连接的配置参数(用户、密码、SSL 等)CHANNEL_NAME,HOST,USER,SSL_TYPE查看各复制通道连接所用的配置信息官方文档
replication_connection_status复制复制连接的当前状态CHANNEL_NAME,SERVICE_STATE,LAST_IO_ERROR_NUMBER查看连接到主服务器的状态,例如是否连接成功官方文档
replication_group_communication_information复制组复制通信统计GROUP_MEMBER_ID,COUNT_SEND,COUNT_RECEIVE查看组复制节点之间的通信统计官方文档
replication_group_member_stats复制组复制成员统计GROUP_MEMBER_ID,COUNT_UNREAD_TXN,COUNT_UNREAD_EVENTS监控组复制中各成员未同步的事务和事件数量官方文档
replication_group_members复制列出组复制的所有成员CHANNEL_NAME,MEMBER_ID,MEMBER_HOST查看所有组复制节点官方文档
rwlock_instances实例表列出所有读写锁实例(读写锁对)NAME,OBJECT_INSTANCE_BEGIN,OBJECT_INSTANCE_END查询服务器使用的内核读写锁实例官方文档
session_account_connect_attrs会话监控会话连接属性(账号角色信息)THREAD_ID,ATTRIBUTE_NAME,ATTRIBUTE_VALUE查看某会话连接时提交的会话属性(如客户端标识等)官方文档
session_connect_attrs会话监控会话连接属性(客户端信息)THREAD_ID,ATTRIBUTE_NAME,ATTRIBUTE_VALUE查看某会话连接时提交的客户端属性(如操作系统、应用名等)官方文档
session_status状态统计当前会话的状态变量VARIABLE_NAME,VARIABLE_VALUE查看当前会话的状态指标官方文档
session_variables系统变量当前会话的系统变量VARIABLE_NAME,VARIABLE_VALUE查看当前会话的系统变量值官方文档
setup_actors设置表列出监控条件(用户/角色)HOST,USER,ROLE配置哪些用户/角色应被性能模式监控官方文档
setup_consumers设置表列出可用统计表(消费者)NAME,ENABLED启用/禁用特定统计表,例如允许历史或汇总表的写入官方文档
setup_instruments设置表列出所有监控对象(instrumentation)NAME,ENABLED,TIMED开关各类事件监控,例如启用等待事件或开启计时开销官方文档
setup_objects设置表列出需监控的数据库对象(库/表)OBJECT_SCHEMA,OBJECT_NAME,ENABLED配置是否监控特定库或表,例如控制 InnoDB 锁监控的范围官方文档
setup_threads设置表列出需监控的线程配置THREAD_ID,NAME_PATTERN指定仅监控特定线程,例如忽略系统后台线程官方文档
socket_instances实例表列出所有活动的 TCP/Unix 套接字THREAD_ID,SOCKET_ID,IP,PORT,STATE查看每个连接的网络套接字信息官方文档
socket_summary_by_event_nameI/O汇总按 socket I/O 事件类型汇总读写字节EVENT_NAME,SUM_NUMBER_OF_BYTES_READ,SUM_NUMBER_OF_BYTES_WRITE分析不同套接字事件(如 writev)的 I/O 大小官方文档
socket_summary_by_instanceI/O汇总按 socket 实例汇总读写字节OBJECT_INSTANCE_BEGIN,SUM_NUMBER_OF_BYTES_READ,SUM_NUMBER_OF_BYTES_WRITE找出哪条网络连接产生最多流量官方文档
status_by_account状态统计按账号汇总状态变量USER,HOST,VARIABLE_NAME,VARIABLE_VALUE查看每个账号对应的状态变量值(例如当前连接数)官方文档
status_by_host状态统计按主机汇总状态变量HOST,VARIABLE_NAME,VARIABLE_VALUE查看每个主机对应的状态变量值官方文档
status_by_thread状态统计每线程的状态变量THREAD_ID,VARIABLE_NAME,VARIABLE_VALUE查看特定线程(连接)在运行过程中的状态变量官方文档
status_by_user状态统计按用户汇总状态变量USER,VARIABLE_NAME,VARIABLE_VALUE查看每个用户的状态变量值官方文档
table_handles列出所有表句柄信息及内部锁OBJECT_INSTANCE_BEGIN,LOCK_MODE,LOCK_STATUS查看当前表锁及句柄详情官方文档
table_io_waits_summary_by_index_usageI/O汇总按表索引汇总逻辑 I/O 统计OBJECT_SCHEMA,OBJECT_NAME,INDEX_NAME,COUNT_FETCH,COUNT_INSERT,COUNT_UPDATE,COUNT_DELETE找出每个表索引的使用情况和 I/O 统计官方文档
table_io_waits_summary_by_tableI/O汇总按表汇总逻辑 I/O 统计OBJECT_SCHEMA,OBJECT_NAME,COUNT_READ,COUNT_WRITE,SUM_TIMER_WAIT找出读/写操作最多的表官方文档
table_lock_waits_summary_by_table按表汇总表锁等待统计OBJECT_SCHEMA,OBJECT_NAME,COUNT_STAR,SUM_TIMER_WAIT查找等待时间最长的表锁官方文档
threads线程/会话列出所有服务器线程的信息THREAD_ID,NAME,PROCESSLIST_COMMAND,PROCESSLIST_STATE,TIMER_WAIT监控线程池中每个线程的状态和活动官方文档
tls_channel_status安全 (TLS)TLS 通道状态(SSL 连接)THREAD_ID,CHANNEL_NAME,PROPERTY,VALUE查看每个连接使用的 TLS 协议版本和加密属性官方文档
tp_thread_group_state线程池列出每个线程组的当前状态(线程池)TP_GROUP_ID,CONSUMER_THREADS,RESERVE_THREADS,ACTIVE_THREAD_COUNT,STALLED_THREAD_COUNT查看线程池中各组的线程分配和队列情况官方文档
tp_thread_group_stats线程池列出线程池每组的统计数据TP_GROUP_ID,CONNECTIONS_STARTED,QUERIES_EXECUTED,SLEEP_WAITS,DISK_IO_WAITS查看线程池各组的活动统计(连接、执行查询、等待事件等)官方文档
tp_thread_state线程池列出线程池创建的每个线程的当前等待状态TP_GROUP_ID,TP_THREAD_NUMBER,WAIT_TYPE,THREAD_ID查看线程池线程的等待类型(例如磁盘 I/O 等)官方文档
user_defined_functions扩展列出所有注册的 UDF(用户自定义函数)UDF_NAME,UDF_RETURN_TYPE,UDF_LIBRARY,UDF_USAGE_COUNT检查数据库中安装的 UDF 及其使用情况官方文档
user_variables_by_thread扩展 (变量)列出当前会话定义的用户变量(含 '@' 前缀)THREAD_ID,VARIABLE_NAME,VARIABLE_VALUE查看某一连接的用户变量及其值官方文档
users连接统计按用户名记录当前连接数和累计连接数USER,CURRENT_CONNECTIONS,TOTAL_CONNECTIONS查看各用户名的连接数和历史连接量官方文档
variables_by_thread系统变量列出每连接会话的系统变量THREAD_ID,VARIABLE_NAME,VARIABLE_VALUE查看各连接的系统变量值官方文档
variables_info系统变量显示每个系统变量的设定来源及取值范围VARIABLE_NAME,VARIABLE_SOURCE,MIN_VALUE,MAX_VALUE查询系统变量是从哪里设置的(如命令行、配置文件等)官方文档

四.常用示例查询

以下示例查询针对不同目的使用 performance_schema 表,帮助性能诊断和监控:

  • SQL 性能调优

    • 查找执行次数最多的 SQL 摘要:

       SELECT DIGEST_TEXT, COUNT_STAR, FIRST_SEEN, LAST_SEEN
       FROM performance_schema.events_statements_summary_by_digest
       ORDER BY COUNT_STAR DESC LIMIT 10;
    • 查找平均响应时间最长的 SQL 摘要:

       SELECT DIGEST_TEXT, AVG_TIMER_WAIT
       FROM performance_schema.events_statements_summary_by_digest
       ORDER BY AVG_TIMER_WAIT DESC LIMIT 10;
  • 锁与等待分析

    • 查看行锁的阻塞情况:

      SELECT CONSTRAINT_CATALOG, ENGINE_LOCK_ID, THREAD_ID,
      OBJECT_SCHEMA, OBJECT_NAME, LOCK_STATUS
      FROM performance_schema.data_lock_waits;
    • 查看元数据锁:

      SELECT EVENT_OBJECT_SCHEMA, EVENT_OBJECT_NAME, LOCK_STATUS
      FROM performance_schema.metadata_locks
      WHERE LOCK_STATUS = 'PENDING';
    • 查找表级锁等待最严重的表:

      SELECT OBJECT_SCHEMA, OBJECT_NAME, COUNT_STAR, SUM_TIMER_WAIT
      FROM performance_schema.table_lock_waits_summary_by_table
      ORDER BY SUM_TIMER_WAIT DESC LIMIT 5;
  • 内存使用分析

    • 查看每线程内存消耗最多的事件:

      SELECT THREAD_ID, EVENT_NAME, SUM_NUMBER_OF_BYTES_USED
      FROM performance_schema.memory_summary_by_thread_by_event_name
      ORDER BY SUM_NUMBER_OF_BYTES_USED DESC LIMIT 10;
    • 查看所有用户累计内存使用情况:

      SELECT USER, SUM_NUMBER_OF_BYTES_USED
      FROM performance_schema.memory_summary_by_user_by_event_name
      GROUP BY USER
      ORDER BY SUM_NUMBER_OF_BYTES_USED DESC;
  • I/O 瓶颈分析

    • 查找物理 I/O 最忙的文件:

      SELECT FILE_NAME, SUM_NUMBER_OF_BYTES_READ, SUM_NUMBER_OF_BYTES_WRITE
      FROM performance_schema.file_summary_by_instance
      ORDER BY (SUM_NUMBER_OF_BYTES_READ + SUM_NUMBER_OF_BYTES_WRITE) DESC LIMIT 5;
    • 查找逻辑 I/O 最多的表:

      SELECT OBJECT_SCHEMA, OBJECT_NAME, COUNT_READ, COUNT_WRITE
      FROM performance_schema.table_io_waits_summary_by_table
      ORDER BY SUM_TIMER_WAIT DESC LIMIT 5;
    • 查找访问次数最多的索引:

      SELECT OBJECT_NAME, INDEX_NAME, COUNT_FETCH
      FROM performance_schema.table_io_waits_summary_by_index_usage
      ORDER BY COUNT_FETCH DESC LIMIT 5;
  • 线程与会话监控

    • 列出活跃线程及其状态:

      SELECT THREAD_ID, NAME, PROCESSLIST_COMMAND,
      PROCESSLIST_TIME, PROCESSLIST_STATE
      FROM performance_schema.threads;
    • 按用户查看当前会话数量:

      SELECT USER, COUNT(*)
      FROM performance_schema.threads
      WHERE PROCESSLIST_COMMAND = 'Query'
      GROUP BY USER;
  • 复制诊断

    • 查看复制通道状态:

      SELECT CHANNEL_NAME, SERVICE_STATE, LAST_ERROR_NUMBER
      FROM performance_schema.replication_applier_status;
    • 查看复制连接状态:

      SELECT CHANNEL_NAME, SERVICE_STATE, LAST_IO_ERROR_NUMBER
      FROM performance_schema.replication_connection_status;
  • TLS/安全监控

    • 查看所有连接的 TLS 协议版本:

      SELECT THREAD_ID, CHANNEL_NAME, PROPERTY, VALUE
      FROM performance_schema.tls_channel_status
      WHERE PROPERTY = 'TLS_VERSION';
    • 查询安装的防火墙组:

      SELECT GROUP_ID, NAME, ACTION
      FROM performance_schema.firewall_groups;
  • 配置与状态检查

    • 查看当前启用的检测器和消费者:

      SELECT NAME, ENABLED
      FROM performance_schema.setup_consumers;
    • 查看当前持久化系统变量:

      SELECT VARIABLE_NAME, VARIABLE_VALUE
      FROM performance_schema.persisted_variables;
    • 查看系统变量来源:

      SELECT VARIABLE_NAME, VARIABLE_SOURCE
      FROM performance_schema.variables_info
      WHERE VARIABLE_SOURCE != 'COMPILED';

利用 performance_schema 提供的丰富监控数据。所有表的详细字段说明可参考 MySQL 官方文档。

  • 开销小但非零:默认配置下开销<5%,但如果启用大量 Instrument 和 Consumer(特别是 ALL %=ON),可能影响性能。

参考资料:

[MySQL 8.0 官方文档](https://dev.mysql.com/doc/mysql-perfschema-excerpt/8.0/en/performance-schema-table-descriptions.html



往期经典:

MySQL集群环境检查与恢复指南

MySQL 日常操作命令

MYSQL8.0权限新特色-Role

MySQL连接数上限问题及解决方案

MySQL主从又双叒叕异常怎么办?一键主从修复脚本你值得拥有

MySQL数据归档详解

MySQL 5.7.44 升级到 MySQL 8.0.35 详细文档

MySQL如何通过binlog日志恢复数据

MYSQL刷新日志FLUSH LOGS命令详解

MySQL单机部署多个实例方法

MySQL InnoDB集群节点异常后加入失败问题处理

搭建一台高性能的MYSQL服务器相关基础配置

MySQL高可用集群MGR参数详解

MYSQL高可用InnoDB Cluster搭建实战

如何选择MYSQL高可用架构,看这篇你就明白了!

MYSQL原生高可用MGR详解。

MYSQL高可用Percona XtraDB Cluster (PXC) 搭建详解

MYSQL PXC 日常管理维护

数据库工具神器-Percona Toolkit,了解一下

MySQL 高可用架构MHA,你了解吗?

Mysql双主+keepalived实现故障自动切换

MYSQL表分区详解

MYSQL主从复制GTID模式一键搭建

MYSQL快速复制新姿势,克隆插件,了解一下!

MYSQL备份实战

数据库常见的概念和术语

文章转载自D-将军,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论