關(guān)于insert /*+ append */我們需要注意以下三點: a、非歸檔模式下,只需append就能大量減少redo的產(chǎn)生;歸檔模式下,只有append+nologging才能大量減少redo。 b、insert /*+ append */時會對表加鎖(排它鎖),會阻塞表上的除了select以外所有DML語句;傳統(tǒng)
關(guān)于insert /*+ append */我們需要注意以下三點:
a、非歸檔模式下,只需append就能大量減少redo的產(chǎn)生;歸檔模式下,只有append+nologging才能大量減少redo。
b、insert /*+ append */?時會對表加鎖(排它鎖),會阻塞表上的除了select以外所有DML語句;傳統(tǒng)的DML在TM enqueue上使用模式3(row exclusive),其允許其他DML在相同的模式上獲得TM enqueue。但是直接路徑加載在TM enqueue使用模式6(exclusive),這使其他DML在直接路徑加載期間將被阻塞。
c、insert /*+ append */?直接路徑加載,速度比常規(guī)加載方式快。因為是從HWM的位置開始插入,也許會造成空間浪費。
1.環(huán)境介紹
數(shù)據(jù)庫版本:
1 2 3 4 5 6 7 8 |
|
網(wǎng)上說測試時不要使用auto trace來查看redo size,這個值是有偏差的.建議建立一個視圖:
1 2 3 4 5 6 |
|
2.示例演示:
2.1 非歸檔模式
1 2 3 4 5 6 |
|
2.1.1 nologging表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
|
2.1.2 logging表:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
|
2.2歸檔模式下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
|
2.2.1 nologging表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
2.2.2 logging表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
在歸檔模式下,對于常規(guī)表的insert append產(chǎn)生和insert同樣的redo
此時的insert append實際上并不會有性能提高.
但是此時的append是生效了的。
3.insert /*+ append */會阻塞除select以外的DML語句,direct-path insert操作是單獨一個事務(wù)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
|
另外開啟一個會話,就會發(fā)現(xiàn)只能select,其他DML全部阻塞。
?
本文摘自 :https://blog.51cto.com/u