首页/数据/数据库速查/performance_schema 快速上手

performance_schema 快速上手

MySQL 自带运行时监控库:当前谁在跑、等什么锁、哪类语句最耗资源,全部可以用 SQL 查,不必翻日志。

数据库速查数据更新于 2026-10-13

performance_schema 的定位

performance_schema 是 MySQL 自带的运行时监控库:当前哪些语句在跑、各自耗时多少、在等什么锁、哪类语句模板最耗资源,都可以用普通 SQL 查到。它把原来只能靠猜的问题变成可查询的事实,缺点是需要理解表之间的关联关系,直接上手时容易被表名淹没,通常按「当前语句、语句汇总、等待事件」三个方向切入最快。

基本信息

适用平台MySQL 5.7 / 8.0、MariaDB(实现略有差异)
开关参数performance_schema=ON(默认开启,需要重启修改)
常用表events_statements_current、events_statements_summary_by_digest
等待相关events_waits_current、data_lock_waits
前置知识digest 会把常量替换为占位符,用于语句聚类

典型使用场景

  • 线上慢时先看当前正在执行的语句与耗时分布
  • 按语句模板找出总耗时最高的 SQL,而不是只看单次最慢
  • 排查锁等待:查看当前等待事件与阻塞关系
  • 评估某类业务的资源占用,为优化排优先级
  • 对比变更前后的语句耗时变化,验证优化效果

看当前最慢语句

看当前最慢语句
SELECT thread_id, event_name, timer_wait/1e12 AS sec, sql_text
FROM performance_schema.events_statements_current
WHERE sql_text IS NOT NULL
ORDER BY timer_wait DESC
LIMIT 10;
-- 按语句模板聚合,找资源消耗最大的 SQL
SELECT schema_name, digest_text, count_star,
       avg_timer_wait/1e12 AS avg_sec,
       sum_rows_examined / count_star AS rows_per_exec
FROM performance_schema.events_statements_summary_by_digest
ORDER BY sum_timer_wait DESC
LIMIT 10;
-- 查看当前等待事件(锁、IO 等)
SELECT * FROM performance_schema.events_waits_current LIMIT 20;

常用表与用途

表内容使用提示
events_statements_current当前连接正在执行的语句配合 timer_wait 排序找长耗时
summary_by_digest按语句模板聚合的累计统计关注 sum 与 avg 两个口径
events_waits_current当前等待事件定位锁与 IO 等待
data_lock_waits行锁等待关系找到持有方与被阻塞方
table_io_waits_summary_by_index_usage索引使用统计判断索引是否真的被使用
setup_consumers采集开关相关消费者关闭时视图为空
digest_text 已把常量归一化成占位符,适合聚合统计;要看具体语句原文时查对应的 history 表,但保留条数受参数限制。
查询监控表本身也消耗资源:高频轮询 performance_schema 会给实例增加可观开销,日常巡检建议使用 sys 视图或外部采集器控制频率。

易错点

  • 以为 history 表能无限回溯:默认每线程只保留少量条数,需要回溯更长需调整参数并权衡内存
  • 相关消费者被关闭时查表得到空结果:先确认 setup_consumers 中的采集开关状态
  • 用累计统计判断当前状况:summary_by_digest 是累计值,必要时先 TRUNCATE 或对比时间窗口
  • 高频轮询监控表:采集动作本身成为负载来源,应通过 sys 视图或外部采集降低频率

数据来源与参考

  • MySQL 8.0 Reference Manual: Performance Schema

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌