有什么方法可以检查表或索引是否已经碎片化?
如何检查表是否碎片?
如何检查索引是否碎片?
我搜索了谷歌,但没有得到满意的答案。我得到了一些点,比如解释计划、表碎片、索引重建等。但是我们的第一步应该是什么,应该如何解决。我们如何一步一步地解决问题?
有什么方法可以检查表或索引是否已经碎片化?
如何检查表是否碎片?
如何检查索引是否碎片?
我搜索了谷歌,但没有得到满意的答案。我得到了一些点,比如解释计划、表碎片、索引重建等。但是我们的第一步应该是什么,应该如何解决。我们如何一步一步地解决问题?
您需要使用
INDEX_STATS
视图来确定碎片。首先,您需要使用单个索引填充此视图:
然后查看这些值
ratio
和height
:如果比率大于 %20
或高度大于等于4
或 lf_rows 低于 lf_blks,
那么您需要针对碎片重建索引。
表格的
blevel
列dba_indexes
是我的主要兴趣点。这给出了 b-tree 索引的分支级别数(包括根节点),并且该height
列与.blevel
如果您可以访问 MOSC,请搜索blevel关键字,尤其是主题Index Health。Oracle 社区还建议为 blevel 大于或等于 4 的索引重建索引。
您可以使用以下查询找到碎片表
并在下面使用以查找碎片索引。 1.在下面执行
完成上述操作后,您可以使用以下查询从 INDEX_STATS 表的报告中获取索引分析报告。
从 INDEX_STATS;
此 INDEX_STATS 表仅包含 1 行。因此,要获得多个索引报告,您必须逐个运行并在每次运行后获取报告。
查询不正确,因为 tuo 正在将 kbytes 与 mbytes 进行比较。这是正确的:
select owner, table_name,round((blocks*8),2)/1024 "size (mb)" , round(((num_rows*avg_row_len)/1024/1024),2) "actual_data (mb)", (round( (blocks*8),2)/1024 - round(((num_rows*avg_row_len)/1024/1024),2)) "wasted_space (mb)" from dba_tables where (round((blocks*8),2)/1024 > round(((num_rows*avg_row_len)/1024/1024),2)) 按 4 排序;