是,但需三者交叉验证:db file sequential read等待异常升高(占比>20%、av rd(ms)>15ms)、physical read io requests增幅远超physical reads、执行计划从index range scan退化为table access full。

会,但不是所有碎片都会拖慢性能——关键看它是否让物理读变多、变慢、变散。
db file sequential read 等待异常升高是第一信号
碎片本身不报错,但它会让索引扫描或小范围查询被迫跳着读多个不连续块,单块读等待时间(Av Rd(ms))和占比就会明显上升:
- 在 AWR 的
Top 5 Timed Events中,db file sequential read占比 >20% 且平均等待 >15ms,需立即关注 - 对比历史报告:若该等待平均时间翻倍,而
Buffer Hit %下降超 5%,且 SQL 执行计划没变,大概率是碎片导致 I/O 离散化 - 排除干扰:归档写、RMAN 备份、LOB 操作也会抬高该等待,要结合
SQL ordered by Physical Reads确认是否集中在业务表/索引段
physical read IO requests 远高于 physical reads 是核心证据
这是碎片最硬的指标——它说明磁盘上数据不连续,一次逻辑读被迫拆成多次物理 I/O:
- 在 AWR 的
Tablespace IO Stats中,重点对比physical read IO requests和physical reads - 若前者增幅远超后者(比如 +80% vs +20%),说明每次 I/O 读取的块数下降,典型碎片特征
- 同时检查对应表空间的
Avg I/O Elapsed Time是否明显高于其他表空间,进一步佐证 I/O 效率恶化
执行计划从 INDEX RANGE SCAN 退化为 TABLE ACCESS FULL 是活证据
碎片不会让索引失效,但会让优化器觉得“走索引比全表还贵”:
- 查
SQL ordered by Physical Reads中排名靠前的语句,追溯其历史执行计划 - 若原本走
INDEX RANGE SCAN的 SQL,近期突然变成TABLE ACCESS FULL,且CLUSTERING_FACTOR未变、统计信息新鲜,那很可能是索引叶块离散所致 - 特别注意那些
OBJECT_NAME含INDEX但执行计划却走全表的 SQL,它们是碎片影响扫描性能的直接线索
真正容易被忽略的是:碎片常和统计信息过期、数据倾斜、绑定变量窥探失效共现。单看一个指标就动手整理表空间,很可能把本该加索引的问题,误判成存储层问题。











