当前位置: 首页 > 工具软件 > REBUILD > 使用案例 >

rebuild与rebuild online效率比对

鄢英毅
2023-12-01
在停机时间清理分区表分区后,重建索引。以下是三次重建索引的操作记录。
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/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29033984/viewspace-775913/

 类似资料: