1. 开篇:数据库世界的听诊器与体检仪

如果把MySQL数据库比作人体,performance_schema就像是精密的医学听诊器,能监听每个脏器(线程)的微观活动;而sys库则是智能体检仪,把庞杂的监测数据转化为直观的健康报告。今天我们就来解剖这两大监控利器的十八般武艺。


2. performance_schema初探:显微镜级的监控能力

2.1 核心功能三件套

-- 查看所有可用的消费者类型(数据收集开关)
SELECT * FROM performance_schema.setup_consumers 
WHERE NAME LIKE '%history%';

/* 输出示例:
| NAME                  | ENABLED |
|-----------------------|---------|
| events_statements_history | YES    |
| events_stages_history | NO      |
*/

这个内置的监控系统通过三个层级实现监控:

  • 监控点(Instrument):注册了2000+传感器
  • 消费者表(Consumer):43张数据存储表
  • 工具类表(Tool):18张配置表

2.2 经典应用场景

场景一:查询性能分析

-- 启用语句历史记录(需提前配置)
UPDATE performance_schema.setup_consumers 
SET ENABLED = 'YES'
WHERE NAME = 'events_statements_history';

-- 查看最近10条执行语句(MySQL 8.0示例)
SELECT EVENT_ID, SQL_TEXT, TIMER_WAIT/1000000000 AS exec_seconds
FROM performance_schema.events_statements_history
WHERE THREAD_ID = PS_CURRENT_THREAD_ID()
ORDER BY EVENT_ID DESC 
LIMIT 10;

场景二:锁等待排查

-- 查看正在等待的锁(需要启用wait/lock监控)
SELECT * FROM performance_schema.data_lock_waits;

3. sys库:智能封装的最佳实践

3.1 视图分类四大家族

通过87个预设视图(MySQL 8.0.33版本),提供四类分析视角:

-- 查看视图类目(示例)
SHOW FULL TABLES IN sys WHERE TABLE_TYPE = 'VIEW';
  1. 主机统计:user_summary, host_summary
  2. 内存分析:memory_by_host_by_current_bytes
  3. 对象巡检:schema_table_statistics
  4. 语句汇总:statement_analysis

3.2 典型应用场景

场景一:快速定位锁等待

-- 查看阻塞关系链(完整示例)
SELECT * FROM sys.innodb_lock_waits;

/* 输出示例:
| wait_started     | waiting_pid | waiting_query          | blocking_pid | blocking_query         |
|-------------------|-------------|------------------------|--------------|------------------------|
| 2023-10-20 11:25 | 1024        | UPDATE t SET ...       | 1020         | SELECT ... FOR UPDATE  |
*/

场景二:索引使用效率分析

-- 检查索引使用情况(需运行一段时间)
SELECT * FROM sys.schema_index_statistics 
WHERE table_schema = 'mydb' AND table_name = 'orders';

/* 输出示例:
| index_name | rows_selected | rows_inserted | rows_updated | rows_deleted |
|------------|---------------|---------------|--------------|--------------|
| PRIMARY    | 1500000       | 300000        | 20000        | 500          |
| idx_status | 800000        | 0             | 0            | 0            |
*/

4. 关联技术:INFORMATION_SCHEMA对比

三方对比示例:

-- 查询表信息三种写法对比
/* 方式一:原始版 */ 
SELECT * FROM information_schema.TABLES 
WHERE TABLE_SCHEMA = 'mydb';

/* 方式二:诊断版 */
SELECT * FROM performance_schema.table_handles 
WHERE OBJECT_SCHEMA = 'mydb';

/* 方式三:智能版 */
SELECT * FROM sys.schema_tables_with_full_table_scans;

5. 技术优缺点辩证观

performance_schema优势

  • 毫秒级精度:最高支持纳秒级计时
  • 实时监控:平均延迟控制在0.5秒内
  • 线程级追踪:支持2^48个线程并发跟踪

sys库的三大短板

  1. 数据非实时:视图存在1~5秒延迟
  2. 依赖项复杂:需要启用21个消费者
  3. 内存消耗:默认配置占用约500MB内存

6. 使用避坑指南

避坑一:错误配置导致数据丢失

-- 正确启用步骤
UPDATE performance_schema.setup_instruments 
SET ENABLED = 'YES', TIMED = 'YES'
WHERE NAME LIKE 'wait/io/file/%';

-- 必须同步启用消费者
UPDATE performance_schema.setup_consumers 
SET ENABLED = 'YES'
WHERE NAME IN ('events_waits_current');

避坑二:监控指标解读陷阱

内存指标示例:

-- sys库内存视图的正确解读
SELECT * FROM sys.memory_global_total;

输出值包含缓存区、线程缓存等复合指标,不可直接等同于物理内存占用。


7. 总结:监控体系的黄金组合

performance_schema与sys库的组合拳,在以下场景中效果显著:

  1. 慢查询根因分析:通过events_stages_history追溯执行阶段
  2. 连接泄露排查:利用session_connect_attrs跟踪连接特征
  3. 资源消耗Top榜:通过host_summary定位问题主机