表和索引碎片

3 oracle fragmentation

有什么方法可以检查表或索引是否已碎片化?

如何检查表是否碎片化?

如何检查索引是否碎片化?

我搜索了谷歌,但没有得到满意的答案。我得到了一些要点,例如解释计划、表碎片、索引重建等。但是我们的第一步应该是什么,应该如何解决。我们如何一步一步地解决问题?

小智 6

您需要使用INDEX_STATS视图来确定碎片。

首先,您需要使用单个索引填充此视图:

SQL> analyze index <your_index> validate structure;
Run Code Online (Sandbox Code Playgroud)

然后查看这些值ratioheight

select round((del_lf_rows/lf_rows)*100,2) ratio, height, lf_blks, lf_rows 
  from index_stats;
Run Code Online (Sandbox Code Playgroud)

如果比率大于 %20

高度大于或等于 4

lf_rows 低于 lf_blks

那么您需要针对碎片重建索引。


bleveldba_indexes表是我的主要娱乐活动。这给出了分支的水平(包括根节点)对B树索引的数量,并且列height密切相关blevel

如果您有权访问 MOSC,请搜索blevel关键字,尤其是主题Index Health。Oracle 社区还建议为 blevel 大于或等于 4 的索引重建索引。

  • Oracle 社区正在与“何时重建 Oracle 索引”的错误信息作斗争。正确的答案是“当指数被打破或者你有基准证明你需要它时”。我花了一些时间来收集我的答案的正确 URL。 (2认同)