首页/数据/SQL 速查/sys schema 巡检视图
性能与执行计划72 条

sys schema 巡检视图

sys 把 performance_schema 原始数据整理成可读结果:全表扫描语句、表级 IO、未使用索引都有对应视图。

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

用巡检视图找问题

性能采集库把原始采集数据切成细粒度的事件,直接查门槛高、读起来也累。附带的那套整理视图把它汇总成了可直接读的结果:哪些语句在做全表扫描、哪些表读写最重、哪些索引从实例启动至今一次都没被用过。日常巡检不需要复杂的采集链路,打开这几个视图就能拿到排序后的清单。前提是相关的采集开关处于开启状态,否则看到全零会误判成「没有问题」。

基本信息

适用平台MySQL 8.0(附带整理视图)
数据来源性能采集库的汇总表
统计周期自实例启动以来,重启后清零
常用视图全表扫描语句、表级统计、未使用索引、索引统计
前提条件相关采集开关与消费者处于开启状态

典型使用场景

  • 例行巡检:列出执行次数最多的全表扫描语句,决定优化顺序
  • 索引精简:找出从启动至今未被使用的索引,评估删除
  • 容量观察:按表的读写量排序,定位热点表
  • 性能抖动复盘:查看某段时间内的语句级别统计
  • 慢查询治理前后的效果对比

常用巡检查询

常用巡检查询
-- 走全表扫描的语句,按执行次数排序
SELECT query, exec_count, total_latency, rows_examined
FROM sys.statements_with_full_table_scans
ORDER BY exec_count DESC
LIMIT 10;

-- 表级读写量与 IO 延迟
SELECT table_schema, table_name, rows_fetched, io_read_latency
FROM sys.schema_table_statistics
ORDER BY io_read_latency DESC
LIMIT 10;

-- 实例启动以来未被使用的索引
SELECT * FROM sys.schema_unused_indexes;

-- 索引使用情况明细:区分范围扫描与全量读取
SELECT * FROM sys.schema_index_statistics
ORDER BY rows_selected DESC LIMIT 10;

常用视图速览

视图内容用途
全表扫描语句执行次数、耗时、扫描行数定位需要加索引或改写的语句
表级统计每张表的读写行数与 IO 延迟定位热点表与容量观察
未使用索引启动至今未被命中的索引索引精简的候选清单
索引统计每个索引的读取行数与耗时判断索引是否真正发挥作用
语句错误与警告带错误或警告的语句汇总发现被静默忽略的数据问题
未使用索引的统计自实例启动起算,报表类、月度对账类索引可能只是近期没用上。直接照单删除风险很高,建议先观察一个完整业务周期,并结合代码检索确认。
看到统计全为零时先怀疑采集链路:确认采集开关与消费者是否开启,再去判断负载是否真的为零。采集关闭的状态下,这份数据不能作为巡检结论。

易错点

  • 照着未使用索引清单直接删索引,低频但关键的业务索引被删掉,季度结算时才发现查询变慢
  • 统计全为零就认为实例没有负载,实际是采集开关未开启,巡检结论完全无效
  • 只按执行次数排序而忽略单次耗时:次数少但单次极慢的语句同样是瓶颈
  • 把启动以来的累计统计当成当前时刻的负载画像,重启后数据清零会得出完全不同的结论
  • 未使用索引的判定忽略主键:清单里出现主键相关条目时应结合文档确认口径

数据来源与参考

  • MySQL 8.0 Reference Manual §30 MySQL sys Schema
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌