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';
- 主机统计:user_summary, host_summary
- 内存分析:memory_by_host_by_current_bytes
- 对象巡检:schema_table_statistics
- 语句汇总: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~5秒延迟
- 依赖项复杂:需要启用21个消费者
- 内存消耗:默认配置占用约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库的组合拳,在以下场景中效果显著:
- 慢查询根因分析:通过events_stages_history追溯执行阶段
- 连接泄露排查:利用session_connect_attrs跟踪连接特征
- 资源消耗Top榜:通过host_summary定位问题主机
评论