Oracle NoLogging Append 方式減少批量insert的redo_size
業務處理中,很多時候使用實表臨時表處理中間結果,而實表的Insert操作預設會記錄redo log,針對此問題收集相關測試總結資訊如下:
【轉】 常見dml、ddl語句使用nologging選項所生成的redo和undo大小比較
DDL/DML Operations |
Direct-path |
nologging |
parallel |
Noarchivelog Redo |
Noarchivelog Undo |
Archivelog Redo |
Archivelog Undo |
|
Insert into XXX select * from YYY |
N |
N |
N |
19076324 |
627240 |
18938620 |
612980 |
|
Alter table XXX nologging; Insert into XXX select * from YYY; |
N |
Y |
N |
19085860 |
631584 |
18935548 |
612912 |
|
Insert /*+ append */ into XXX select * from YYY |
Y |
N |
N |
26628 |
4048(only metadata) |
19145656 |
4048 |
|
Alter table XXX nologging; Insert /*+ append */ into XXX select * from YYY |
Y |
Y |
N |
26868 |
4048(only metadata) |
26836 |
4048 |
|
Create table XXX as select * from YYY |
Y |
N |
N |
77624 |
18500 |
19162220 |
15468 |
|
Create table XXX nologging as select * from YYY |
Y |
Y |
N |
52160 |
11176 |
52408 |
11248 |
|
Alter table XXX move nologging; |
N |
Y |
N |
36288 |
6208 |
36576 |
6208 |
|
Alter table XXX move; |
N |
N |
N |
39788 |
7288 |
19154024 |
5972 |
|
Create index XXX |
N |
N |
N |
21280 |
1864 |
3093616 |
1888 |
|
Create index XXX nologging |
N |
Y |
N |
22264 |
2208 |
22620 |
2232 |
|
update XXX set |
N |
N |
N |
122903212 |
47987880 |
122403692 |
47786680 |
|
Update /*+ parallel(5) */ XXX set |
N |
N |
Y(Queries) |
121629928 |
46706296 |
120818336 |
46466056 |
|
Alter table XXX nologging; update XXX set |
N |
Y |
N |
123155288 |
48006404 |
110396512 |
41617700 |
|
Alter table XXX nologging; update /*+ parallel(5) */ XXX set |
N |
Y |
Y(Queries) |
119748064 |
46152324 |
120205036 |
46261536 |
|
Alter session enable parallel dml Update /*+ parallel(5) */ XXX set |
N |
N |
Y(DML) |
59846488 |
24680220 |
59740516 |
24611672 |
|
Alter table XXX nologging; Alter session enable parallel dml Update /*+ parallel(5) */ XXX set |
N |
Y |
Y(DML) |
59831756 |
24673396 |
59717116 |
24602628 |
|
delete XXX; |
N |
N |
N |
60684720 |
37650208 |
61770472 |
38254648 |
|
delete /*+parallel(5) */ XXX; |
N |
N |
Y(Queries) |
60685416 |
37650436 |
61988568 |
38461832 |
|
Alter table XXX nologging; delete XXX; |
N |
Y |
N |
60684956 |
37650216 |
61989984 |
38460424 |
|
Alter table XXX nologging; delete /*+parallel(5) */ XXX; |
N |
Y |
Y(Queries) |
60685092 |
37650224 |
61986156 |
38459172 |
|
Alter session enable parallel dml delete /*+parallel(5) */ aabbn; |
N |
N |
Y(DML) |
65072896 |
40990412 |
61979216 |
38457372 |
|
Alter table XXX nologging; Alter session enable parallel dml delete /*+parallel(5) */ aabbn; |
N |
Y |
Y(DML) |
65073828 |
40998048 |
62022668 |
38500548 |
|
結論:
1、insert into:非direct方式下noarchivelog和archivelog兩種模式均產生大量undo、redo;direct方式下noarchivelog模式均產生少量undo、redo;direct+logging方式下archivelog模式產生少量undo、大量redo;direct+nologging方式下archivelog模式產生少量undo、少量redo
2、create table as:CTAS本身就是一種direct的操作,CTAS+logging方式下noarchivelog模式產生少量redo、少量undo;CTAS+nologging方式下noarchivelog模式產生更少量redo、更少量undo;CTAS+logging方式下archivelog模式產生少量undo、大量redo;CTAS+nologging方式下archivelog模式產生少量undo、少量redo;
3、alter table ... move:nologging方式下noarchivelog模式產生少量undo、少量redo;nologging方式下archivelog模式產生少量undo、少量redo;logging方式下archivelog模式產生少量undo、大量redo
4、create index:logging+nologging方式下noarchivelog模式產生少量undo、少量redo;logging方式下archivelog模式產生少量undo、大量redo;nologging方式下archivelog模式產生少量undo、少量redo
5、update:enable parallel方式下,noarchivelog+ archivelog模式生成少量undo、少量redo;非enable parallel方式下,noarchivelog+ archivelog模式生成大量undo、大量redo
6、delete:任何組合都會生成大量undo、大量redo
其他參考列表:
1) Nologging到底何時才能生效? http://www.eygle.com/faq/Nologging&append.htm非歸檔模式下:append能大量減少redo量。
歸檔模式下:在表空間和資料庫級非force logging模式下,表如果是nologging,則append能大量減少redo量。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31383567/viewspace-2144565/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- nologging和insert /*+append*/APP
- oracle nologging和appendOracleAPP
- Oracle的Nologging何時生效 與 批量insert載入資料速度(zt)Oracle
- Nologging and append testAPP
- Oracle資料庫減少redo日誌產生方式Oracle資料庫
- insert /*+ append */ into 與insert into 的區別APP
- append和nologging的案例APP
- insert優化(nologging方式提升17倍效能)優化
- 關於加快INSERT語句執行速度和 HINT /*+ append*/及nologging的使用APP
- nologging與append ztAPP
- 減少oracle日誌的產生Oracle
- [Oracle] Append hint(insert sql) will lead a TM LOCKOracleAPPSQL
- [Oracle] Insert into速度測試nologging+parallelOracleParallel
- 減少ORACLE中的磁碟I/O(轉)Oracle
- alter table nologging /*+APPEND PARALLEL(n)*/APPParallel
- 轉eygle_append與nologgingAPP
- 聊聊Append、nologging和Redo LogAPP
- Oracle批量插入資料insert all into用法Oracle
- Python IDLE可以使用ctrl +[ 批量減少縮排,ctrl + ]批量增加縮排Python
- insert append需要注意的問題APP
- insert /*+ append */直接路徑插入APP
- insert 中append 用法詳解APP
- 7中方式來減少webpack bundle體積Web
- CTAS和insert append的一個測試APP
- 關於insert /* append */的幾點註記APP
- 關於insert /*+ append*/ 各種insert插入速度比較APP
- Append與Direct-Path Insert(一)APP
- Append與Direct-Path Insert(二)APP
- 直接路徑插入 -- insert /*+append*/ into [zt]APP
- Oracle的Nologging何時生效 與 批次insert載入資料效率.Oracle
- 遊戲心理學研究:減少玩家挫敗感的方式及解說遊戲
- Oracle的Nologging何時生效 與 批次insert載入資料速度(zt)Oracle
- 如何讓insert /*+ append */ 採用並行。APP並行
- 加快insert into select速度with hints and nologging
- 使用MVVM減少控制器程式碼實戰(減少56%)MVVM
- 減少對錶的查詢
- 臨時表的APPEND方式插入APP
- 使用append+nologging引起恢復故障實驗APP