在停机时间清理分区表分区后,重建索引。以下是三次重建索引的操作记录。
12:28:26 sys@DAVID>alter index DW0.IDX_DAVID_RESEQ rebuild ;
Index altered.
Elapsed: 00:23:36.16
Elapsed: 00:29:09.62
13:51:35 sys@DAVID>alter index DW0.IDX_DAVID_RESEQ rebuild online ;
Index altered.
Elapsed: 01:15:23.79
15:11:19 sys@DAVID>alter index DW0.IDX_DAVID_RESEQ rebuild parallel 5;
Index altered.
Elapsed: 00:07:54.67
可以看到rebuild效率明显高于rebuild online,我们来看看其执行计划。
Rebuild:
Plan hash value: 3167759897
-------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------------------
| 0 | ALTER INDEX STATEMENT | | 10M| 51M| 48518 (2)| 00:09:43 |
| 1 | INDEX BUILD NON UNIQUE| IDX_DAVID_RESEQ | | | | |
| 2 | SORT CREATE INDEX | | 10M| 51M| | |
| 3 | INDEX FAST FULL SCAN| IDX_DAVID_RESEQ | | | | |
-------------------------------------------------------------------------------------------------
Rebuild online
Plan hash value: 2561495399
-----------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop |
-----------------------------------------------------------------------------------------------------------------
| 0 | ALTER INDEX STATEMENT | | 10M| 51M| 48518 (2)| 00:09:43 | | |
| 1 | INDEX BUILD NON UNIQUE| IDX_DAVID_RESEQ | | | | | | |
| 2 | SORT CREATE INDEX | | 10M| 51M| | | | |
| 3 | PARTITION RANGE ALL | | 10M| 51M| 48518 (2)| 00:09:43 | 1 | 283 |
| 4 | PARTITION HASH ALL | | 10M| 51M| 48518 (2)| 00:09:43 | 1 | 1 |
| 5 | TABLE ACCESS FULL | PAYMENTORDER | 10M| 51M| 48518 (2)| 00:09:43 | 1 | 283 |
-----------------------------------------------------------------------------------------------------------------
首先,rebuild 和rebuild online的操作方式是不同的,rebuild只会扫描原索引,而rebuild online需要全表扫描。
其实这个是很好理解的。Rebuild时会阻塞dml,所以,原索引是不会变化的,只需要早原索引的基础上重建即可,索引rebuild的效率要高的多。
我们还看到第一个rebuild的时间虽然比rebuild online的时间短的多,但是比最后一次rebuild要长的多。
这是因为第一个rebuild也需要全表扫描,这是因为,清理分区后,索引变得不可用,所以不能在原索引上重建。
那既然都是全表扫描重建索引,第一个rebuild和rebuild online有什么区别吗?
一、rebuild 会阻塞dml语句而rebuild online则不会。
二、rebuild online时系统会产生一个SYS_XXX_xxx的IOT类型的系统临时日志表,所有rebuild online时索引的变化都记录在这个表中,当新的索引创建完成后,把这个表的记录维护到新的索引中去,然后drop掉旧的索引,rebuild online就完成了,这些临时segment都可以在rebuild在数据库中可以看到,
所以它们虽然执行计划是一致的,但其实其操作方式是完全不同的。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29033984/viewspace-775913/,如需转载,请注明出处,否则将追究法律责任。