背景: 在一次某客户的停产维护中, 有一项例行对大表 rebuild 索引的操作, 本是按部就班的操作, 其效果却出乎我的意料, 大部分索引的效果前后都有 4 倍左右的变化, 最大的那个索引前后居然差了 7 倍多, 并且重建索引也没有用到压缩选项, 这个与我之前的预期差距很大, 化名记录下这个结果.
1. 重建索引
使用 rebuild 重建索引, 因为是停产状态, 无需加 online 选项:
- --rebuild index
- ALTER INDEX JINGYU.IDX_XXX_1
- REBUILD
- NOCOMPRESS
- PARALLEL 4
- TABLESPACE DBS_I_JINGYU
- STORAGE (INITIAL 64K);
- --noparallel
- alter index JINGYU.IDX_XXX_1 noparallel;
需要注意如果用到并行, 结束后一定要记得取消并行度.
2. 重建前后索引大小变化
比对重建前后索引的空间大小占用变化:
-- 重建前索引空间:
- select owner, segment_name, bytes/1048576 "MB" from dba_segments where segment_name like 'IDX_XXX_1';
- OWNER SEGMENT_NAME MB
- ------------------------------ ------------------------------ ----------
JINGYU IDX_XXX_1 78749.125
-- 重建后索引空间:
- select owner, segment_name, bytes/1048576 "MB" from dba_segments where segment_name like 'IDX_XXX_1';
- OWNER SEGMENT_NAME MB
- ------------------------------ ------------------------------ ----------
JINGYU IDX_XXX_1 10795.4375
可以看到这个索引 IDX_XXX_1 从 78749M 变成了 10795M, 前后相差 7 倍之多, 效果非常明显. 其余大部分大表索引重建前后也有 4 倍左右的差距.
来源: http://www.linuxidc.com/Linux/2018-06/152798.htm