rebuild與rebuild online效率比對
在停機時間清理分割槽表分割槽後,重建索引。以下是三次重建索引的操作記錄。
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在資料庫中可以看到,
所以它們雖然執行計劃是一致的,但其實其操作方式是完全不同的。
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- alter index rebuild 與 rebuild onlineIndexRebuild
- 聊聊索引Index Rebuild和Rebuild Online(下)索引IndexRebuild
- 索引rebuild和rebuild online時要慎重索引Rebuild
- 聊聊索引Index Rebuild和Rebuild Online(上)索引IndexRebuild
- Index Online RebuildIndexRebuild
- alter index rebuild和rebuild online的區別IndexRebuild
- create index online 與rebuild index onlineIndexRebuild
- create index online 與rebuild index onlineIndexRebuild
- 索引rebuild和rebuild online時要慎重(轉載)索引Rebuild
- shrink 與rebuild對索引高度的影響對比Rebuild索引
- 【羅玄】從鎖的角度看rebuild index online和rebuild indexRebuildIndex
- index rebuild online的問題IndexRebuild
- alter index ind1 rebuild 和alter index ind1 rebuild onlineIndexRebuild
- alter index rebuild online引發的血案IndexRebuild
- 測試index online rebuild故障記錄IndexRebuild
- rebuild online索引遇到ora-1450Rebuild索引
- alter index ... rebuild online的機制(zt)IndexRebuild
- “rebuild index online hang住" 問題解析RebuildIndex
- ORA-08104 索引online rebuild索引Rebuild
- 索引rebuild online失敗後處理索引Rebuild
- rebuild index online的鎖機制淺析RebuildIndex
- Online rebuild index遭遇ORA-08104RebuildIndex
- Rebuild IndexesRebuildIndex
- rebuild indexRebuildIndex
- index rebuildIndexRebuild
- Rebuild TreeRebuild
- rebuild index 排序RebuildIndex排序
- sybase rebuild indexRebuildIndex
- alter index rebuild與index_statsIndexRebuild
- rebuild index online和create index online及沒有online的區別RebuildIndex
- oracle10g_alter index rebuild_online_重構索引OracleIndexRebuild索引
- (轉)Index Rebuild Online 過程(9i)完整版IndexRebuild
- 關於rebuild index online 及drop index後重建問題RebuildIndex
- Index rebuild --case 1IndexRebuild
- MSSQL Rebuild(重建)索引SQLRebuild索引
- "Alter index rebuild online parallel n"會修改索引的degree屬性IndexRebuildParallel索引
- best practice of rebuild your partition table local index online by using: "update indexes"RebuildIndex
- ORACLE中index的rebuildOracleIndexRebuild