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_schema | ON(必须) |
performance_schema_instrument = '%=ON' | 开启所有监控 |
performance_schema_events_statements_history_size | 10-100 |
performance_schema_events_statements_history_long_size | 100-1000 |
setup_consumers 表 | 启用:events_statements_history、..._long、waits |
setup_instruments 表 | 启用:wait/io/file/sql/handler、statement/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_ | 与复制连接、组复制以及故障转移相关的监控 |
| 网络/Socket | socket_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_WAIT | 同 events_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_WAIT | 同 events_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_name | I/O汇总 | 按文件 I/O 事件类型汇总读写字节数 | EVENT_NAME,SUM_NUMBER_OF_BYTES_READ,SUM_NUMBER_OF_BYTES_WRITE | 分析哪种 I/O 操作最耗时 | 官方文档 |
file_summary_by_instance | I/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,GTID | MySQL 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_USED | 同 memory_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_objects | NDB 同步 | 列出 NDB 集群中不被自动同步的对象(集群模式) | OBJECT_TYPE,OBJECT_SCHEMA,OBJECT_NAME | NDB Cluster 同步监控 | 官方文档 |
ndb_sync_pending_objects | NDB 同步 | 列出 NDB 集群中待同步的对象 | OBJECT_TYPE,OBJECT_SCHEMA,OBJECT_NAME | NDB 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_name | I/O汇总 | 按 socket I/O 事件类型汇总读写字节 | EVENT_NAME,SUM_NUMBER_OF_BYTES_READ,SUM_NUMBER_OF_BYTES_WRITE | 分析不同套接字事件(如 writev)的 I/O 大小 | 官方文档 |
socket_summary_by_instance | I/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_usage | I/O汇总 | 按表索引汇总逻辑 I/O 统计 | OBJECT_SCHEMA,OBJECT_NAME,INDEX_NAME,COUNT_FETCH,COUNT_INSERT,COUNT_UPDATE,COUNT_DELETE | 找出每个表索引的使用情况和 I/O 统计 | 官方文档 |
table_io_waits_summary_by_table | I/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 5.7.44 升级到 MySQL 8.0.35 详细文档




