用巡检视图找问题
性能采集库把原始采集数据切成细粒度的事件,直接查门槛高、读起来也累。附带的那套整理视图把它汇总成了可直接读的结果:哪些语句在做全表扫描、哪些表读写最重、哪些索引从实例启动至今一次都没被用过。日常巡检不需要复杂的采集链路,打开这几个视图就能拿到排序后的清单。前提是相关的采集开关处于开启状态,否则看到全零会误判成「没有问题」。
基本信息
| 适用平台 | 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 延迟 | 定位热点表与容量观察 |
| 未使用索引 | 启动至今未被命中的索引 | 索引精简的候选清单 |
| 索引统计 | 每个索引的读取行数与耗时 | 判断索引是否真正发挥作用 |
| 语句错误与警告 | 带错误或警告的语句汇总 | 发现被静默忽略的数据问题 |
未使用索引的统计自实例启动起算,报表类、月度对账类索引可能只是近期没用上。直接照单删除风险很高,建议先观察一个完整业务周期,并结合代码检索确认。
看到统计全为零时先怀疑采集链路:确认采集开关与消费者是否开启,再去判断负载是否真的为零。采集关闭的状态下,这份数据不能作为巡检结论。