直接載入和並行記載-01

dotaddjj發表於2011-10-27

不久之前記得做過幾個測試關於nologgingappend的產生redo的。看並行和直接載入剛好有點需要記載的地方就貼blog上了。

直接路徑載入將直接繞過buffer cache將資料直接寫入磁碟。而且會把資料寫入HWM以上的資料塊中,所以一般直接路徑載入速度上可能比常規載入快。

直接路徑載入既可以並行 也可以序列,對分割槽表和普通表都可以。

Insert /*+append*/ into tt07 select * from dba_objects

當然如果是insert into …values單條插入方式,oracle10G中沒有此項功能,網友說到在11G中可以insert /*+append_values*/ into tt07 values( ),不過個人沒有11G的測試庫也沒有測試。

Sql>create table tt07 as select * from dba_objects where 1<>1

Sql>alter table tt07 nologging

SQL> insert into tt07 select * from dba_objects;

已建立48482行。

統計資訊

----------------------------------------------------------

628 recursive calls

3990 db block gets

5857 consistent gets

0 physical reads

5468060 redo size

SQL> rollback;

回退已完成。

SQL> insert /*+append*/ into tt07 select * from dba_objects;

已建立48482行。

統計資訊

----------------------------------------------------------

168 recursive calls

731 db block gets

4323 consistent gets

0 physical reads

9888 redo size

資料庫是oracle 10G 歸檔模式,雖然表設定了logging模式,但是個人測試發覺首先是nologgingappend都不能缺少才能大幅減少redo。但是這裡oracle認為不是append直接插入就不管nologging模式還是寫入大量redo嗎?

其他要點:

如果表有索引dml效能肯定會下降,同樣直接載入時也最好alter index indexname unusable 然後再重用索引,同樣直接載入會消耗大量的空間。而且載入時表是exclusive模式,不能對其重建索引和dml,這也是需要考慮的地方。

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25362835/viewspace-1056002/,如需轉載,請註明出處,否則將追究法律責任。

相關文章