摘要:Ø 提供只读视图,通过标准 SQL 查询(如SHOW命令的底层实现)。
MySQL 的系统库(特别是 performance_schema)是性能调优的重要工具。以下是针对这一主题的系统化总结:
一、MySQL 系统库简介
MySQL 内置三个核心系统库,用于提供元数据、性能监控和管理功能:
information_schemaØ 存储数据库元数据(表、列、权限等)。
Ø 提供只读视图,通过标准 SQL 查询(如 SHOW 命令的底层实现)。
performance_schemaØ 聚焦性能监控,记录服务器运行时的底层事件(如锁、查询、资源使用等)。
Ø 默认启用,通过内存表存储数据,对性能影响较小。
sysØ 基于 performance_schema 的增强工具库,提供预定义的视图和存储过程。
Ø 简化性能数据分析(如 sys.schema_table_lock_waits 视图直接显示表锁等待)。
二、performance_schema 核心功能
1. 配置与启用
检查是否启用:sql
SHOW VARIABLES LIKE 'performance_schema'; -- 返回 ON 表示已启用
关键配置项(在 my.cnf 中):ini
[mysqld]
performance_schema=ON # 总开关
performance_schema_consumer_events_statements_history=ON # 启用语句历史记录
2. 核心表分类
表分类描述常用表举例Setup 表配置监控项setup_instruments, setup_consumers实例表记录对象实例(如连接、文件)file_instances, socket_instances事件表存储具体事件数据events_waits_current, events_statements_history属性表附加上下文信息(用户、主机等)session_acCOUNT_connect_attrs锁与事务表监控锁和事务状态metadata_locks, data_locks3. 关键配置项说明
setup_instruments:控制监控的“仪器”(事件采集点)。sql
-- 启用所有等待事件的监控
UPDATE setup_instruments SET ENABLED = 'YES', TIMED = 'YES' WHERE NAME LIKE 'wait/%';
setup_consumers:决定事件数据的存储位置。sql
-- 启用事件历史记录
UPDATE setup_consumers SET ENABLED = 'YES' WHERE NAME = 'events_statements_history';
三、性能分析实战场景
1. 监控锁等待
sql
-- 查看当前锁等待
SELECT * FROM performance_schema.metadata_locks
WHERE LOCK_STATUS = 'PENDING';
-- 分析表级锁等待统计
SELECT OBJECT_SCHEMA, OBJECT_NAME, COUNT_READ, COUNT_WRITE
FROM performance_schema.table_lock_waits_summary_by_table
ORDER BY SUM_TIMER_WAIT DESC;
2. 分析慢查询
sql
-- 按 SQL 摘要统计最耗时的查询
SELECT DIGEST_TEXT, COUNT_STAR, SUM_TIMER_WAIT/1e9 AS total_sec
FROM performance_schema.events_statements_summary_by_digest
ORDER BY SUM_TIMER_WAIT DESC LIMIT 5;
3. 诊断文件 I/O 瓶颈
sql
-- 查看文件 I/O 延迟统计
SELECT FILE_NAME, COUNT_READ, COUNT_WRITE,
SUM_TIMER_READ/1e9 AS read_sec,
SUM_TIMER_WRITE/1e9 AS write_sec
FROM performance_schema.file_summary_by_instance;
四、性能调优建议
按需配置Ø 仅启用必要的 setup_instruments 和 setup_consumers,避免资源浪费。
Ø 示例:若无需监控文件 I/O,关闭相关 instrument:
sql
UPDATE setup_instruments SET ENABLED = 'NO' WHERE NAME LIKE 'wait/io/file/%';
结合 sys 库简化分析Ø 使用 sys 库的预定义视图(如 sys.statement_analysis)快速定位问题:
sql
SELECT * FROM sys.statement_analysis
ORDER BY avg_latency DESC LIMIT 10;
定期清理历史数据Ø 避免 performance_schema 内存占用过高:
sql
TRUNCATE TABLE performance_schema.events_statements_history;
五、总结
performance_schema 是 MySQL 性能调优的“显微镜”,通过精细的事件监控提供底层洞察。合理配置和查询其表结构,能够快速定位锁竞争、慢查询、资源瓶颈等问题。结合 sys 库的高级视图,可大幅降低人工分析复杂度。通过实际场景演练(如分析锁等待或慢查询),可以更深入理解如何利用这些工具优化数据库性能。
来源:老客数据一点号