首页/数据/数据库速查/sys 库常用诊断视图

sys 库常用诊断视图

官方把 performance_schema 封装成人话视图:资源消耗排行、锁等待链、冗余与未使用索引,一查即得。

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

sys 库的定位

官方把 performance_schema 的原始表封装成人类可读的视图,统一放在 sys 库里:语句开销排行、锁等待链条、冗余索引、未使用索引、IO 热点都能一条 SQL 查到。它不额外采集数据,只是把已有监控信息翻译成人话,因此视图的时效性与采样范围仍受 performance_schema 配置约束。

基本信息

适用平台MySQL 5.7+、MariaDB 10.6+ 自带
依赖performance_schema 需开启(默认开启)
高频视图statement_analysis、innodb_lock_waits、schema_unused_indexes
权限访问部分视图需要 PROCESS 权限
注意视图查询本身也有开销,避免高频轮询

典型使用场景

  • 定位谁在消耗资源:按语句模板看总耗时、平均耗时与扫描行数排行
  • 排查锁等待:直接拿到阻塞方与被阻塞方的线程与 SQL,不必手工拼表
  • 索引治理:列出从未被使用的索引与冗余索引,作为清理候选
  • IO 热点分析:按文件或按表查看读写字节数,定位大表扫描
  • 连接与会话总览:按用户、按主机汇总连接数与语句负载

常用视图

常用视图
-- 语句开销排行(归一化后的模板)
SELECT * FROM sys.statement_analysis LIMIT 10;
-- 锁等待链条:谁在阻塞谁
SELECT * FROM sys.innodb_lock_waits\G
-- 从未使用过的索引,可作删除候选
SELECT * FROM sys.schema_unused_indexes;
-- 冗余索引(被其他索引前缀覆盖)
SELECT * FROM sys.schema_redundant_indexes;
-- 当前连接与执行的语句
SELECT * FROM sys.processlist WHERE command <> 'Sleep';

常用视图与用途

视图看什么使用提示
statement_analysis语句模板的耗时、执行次数、扫描行数按 avg_latency 或 rows_examined 排序
innodb_lock_waits阻塞方、被阻塞方、等待时长可直接作为 kill 决策依据
schema_unused_indexes自实例启动以来未被使用的索引需先稳定运行足够时间再采信
schema_redundant_indexes被其他索引覆盖的冗余索引删除前确认无特殊用途
io_global_by_file_by_bytes按文件统计读写字节定位大表扫描与临时文件
user_summary_by_statement_latency按用户汇总语句延迟区分应用账号的资源占用
sys 视图是聚合结果,数据源仍是 performance_schema:如果 events_statements 相关消费者被关闭,视图会返回空或只有极少量数据,排查前先确认采集已开启。
schema_unused_indexes 的结论要谨慎使用:实例重启后统计会清零,业务还有周期性任务(月初报表、季度结算)时,长期未使用不等于可以删除。

易错点

  • 把 sys 视图当实时监控频繁轮询:视图基于 performance_schema 聚合并可能生成临时表,高频繁查本身会带来开销
  • 5.7 与 8.0 的视图字段不同:跨版本复用脚本前先在各版本上验证字段名,否则报未知列
  • 看到冗余索引就立刻删除:外键依赖、唯一约束、业务约定的索引可能被视图判为冗余,需人工复核
  • 依赖未使用索引视图做结论但实例刚重启:统计数据从零开始积累,此时结论没有参考价值

数据来源与参考

  • MySQL 8.0 Reference Manual: MySQL sys Schema

相关工具

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