Oracle 索引碎片

Oracle index fragmentation

我想知道除了“分析索引验证结构”之外还有什么方法可以找出Oracle数据库中的索引碎片吗?因为这会导致生产环境中的行锁定。 “在线分析索引验证结构”未填充 index_stats。 谢谢。

如果您的优化器统计信息相对较新,您可以执行类似

的操作
  • 从 USER_INDEXES
  • 中获取 LEAF_BLOCKS 的数量
  • 从 USER_INDEXES
  • 得到 NUM_ROWS
  • 从 USER_TABLES
  • 获取索引中每一列的 AVG_COL_LEN

将列长度加上 rowid 的 6 个字节乘以行数得到索引条目的总字节数。

根据其中的数据以及数据的插入方式,索引通常会占用 65-90% 左右的空间。投入一些块级别的开销(比如每 8k 块 200 字节),您可以使用它来估计您 期望 索引具有多少叶块。

如果这与您拥有的 LEAF_BLOCK 统计数据大致接近,那么您可以假设该索引可能没有“碎片化”(尽管这个术语可以涵盖很多事情)。

但是除非您有性能问题,您可以目前 绑定回这个索引,否则我不会太担心索引碎片。

行锁就是行锁;因此,这不太可能是由于索引碎片(这是另一个主题)造成的。 行锁一般由应用程序取出,属于正常行为。