如何加速Oracle大批量資料處理

2021-09-30 05:36:26 字數 3205 閱讀 6186

一、提高dml操作的辦法:

簡單說來:

1、暫停索引,更新後恢復.避免在更新的過程中涉及到索引的重建.

2、批量更新,每更新一些記錄後及時進行提交動作.避免大量占用回滾段和或臨時表空間.

3、建立一臨時的大的表空間用來應對這些更新動作.

5、加大排序緩衝區

alter session set sort_area_size=100000000;

insert into tableb select * from tablea;

commit;

如果update的是索引字段,就會涉及到索引的重建,暫停索引不會提高多少的速度,反而有可能降低update速度,

因為在更新是索引可以提高資料的查詢速度,重建索引引起的速度降低影響不大。

oracle優化修改引數最多也只能把效能提高15%,大部分都是sql語句的優化!

update總體來說比insert要慢 :

幾點建議:

1、如果更新的資料量接近整個表,就不應該使用index而應該採用全表掃瞄

2、減少不必要的index,因為update表通常需要update index

3、如果你的伺服器有多個cpu,採用parellel hint,可以大幅度的提高效率

另外,建表的引數非常重要,對於更新非常頻繁的表,建議加大pctfree的值,以保證資料塊中有足夠的空間用於update, 從而降低chained_rows。

二、各種批量dml操作:

(1)、oracle批量拷貝:

set arraysize 20

set copycommit 5000

using select * from table_name2;

(2 )、常規插入方式:

insert into t1 select * from t;

為了提高速度可以使用下面方法,來減少插入過程中產生的日誌:

alter table t1 nologging;

insert into t1 select * from t;

commit;

(3)、ctas方式:

create table t1

asselect * from t;

為了提高速度可以使用下面方法,來減少插入過程中產生的日誌,並且可以制定並行度:

create table t1 nologging parallel(degree 2) as select * from t;

(4)、direct-path插入:

commit;

為了提高速度可以使用下面方法,來減少插入過程中產生的日誌:

alter table t1 nologging;

direct-path插入特點:

2、 direct-path 會使資料庫不記錄直接路徑匯入的資料的重做日誌,會對恢復帶來麻煩。

3、 direct-path 直接在表段的高水位線以上的空白資料塊中寫資料,不會重用高水位線以下的空間,會對空間的使用造成一定的浪費,對查詢的效能也會造成一定的影響。而常規插入會優先考慮使用高水位線之下有空閒空間存在的資料塊。因此理論上 direct-path 插入會比常規插入速度更快,因為 direct-path 直接使用新資料塊,而常規插入要遍歷 freelist 獲取可用空閒資料塊,如果 同 nologging 配合,這種速度優勢會更加明顯。

7、 資料直接插入資料檔案,繞過 buffer cache 並且忽略了引用完整性約束。

8、 不管表是否在 nologging 下,只要是 direct  insert ,就不會對資料內容生成 undo 。

9、 oracle 在 direct-path insert 操作末尾,對具有索引的表執行索引維護,這樣就避免了在 drop 掉索引後,再 rebuild 。

10、        direct-path insert比常規的插入需要更多的空間。因為它將資料插入在高水位之上。並行插入非分割槽表需要更多的空間,因為它需要為每乙個並行執行緒建立臨時段。

11、        在插入期間,資料庫在表上獲得排他鎖,使用者不能在表上執行並行插入、更新或者刪除操作,並行的索引建立和build也不被允許。但卻可以並行查詢,但查詢返回的是插入之前的結果集 。

(5)、並行dml:

如果你的伺服器有多個cpu ,採用parellel hint ,可以大幅度的提高效率

alter session enable parallel dml;

insert /*+ parallel (tablea, 2) */into tablea

select * from tableb;

為了提高速度可以使用下面方法,來減少插入過程中產生的日誌:

insert /*+ parallel (tablea, 2) */into tablea nologging

select * from tableb;

oracle 預設並不會開啟pdml ,對dml 語句必須手工啟用。即需要執行

alter table enable parallel dml 命令。

並行dml 特點:

1 、在並行dml模式中,預設的就是direct-path插入,為了執行並行dml模式,必須滿足以下條件:

a、必須是oracle企業版;

b、必須在session中使並行dml生效,執行以下sql語句:

alter session parallel dml;

c、必須指定table的並行屬性,在建立的時候或者其他時候,或者在insert操作時使用「parallel」提示。

2 、並行direct-path insert到分割槽表:

類似於serial direct-path insert,每個並行操作分配給乙個或者多個分割槽,每個並行操作插入資料到各自的分割槽段的高水位標誌之上,commit之後,使用者就能看到更新的資料。

3、並行direct-path insert到非分割槽表:

每個並行執行分配乙個新的臨時段,並插入資料到臨時段。當commit執行後,並行執行協調者合併新的臨時段到主表段,使用者就能看到更新的資料。

4、direct-path insert可以使用log或者不使用log。

5、另外不得不說的是,並行不是乙個可擴充套件的特性,只有在資料倉儲或作為dba 等少數人的工具在批量資料操作時利於充分利用資源,而在oltp 環境下使用並行需要非常謹慎。事實上pdml 還是有比較多的限制的,例如不支援觸發器,引用約束,高階複製和分布式事務等特性,同時也會帶來額外的空間占用,pddl 同 樣是如此。

如何加速Oracle大批量資料處理

一 提高dml操作的辦法 簡單說來 暫停索引,更新後恢復.避免在更新的過程中涉及到索引的重建.批量更新,每更新一些記錄後及時進行提交動作.避免大量占用回滾段和或臨時表空間.建立一臨時的大的表空間用來應對這些更新動作 4 批量更新,每更新一些記錄後及時進行提交動作.避免大量占用回滾段和或臨時表空間.5...

如何加速Oracle大批量資料處理

如何加速oracle大批量資料處理 一 提高dml操作的辦法 簡單說來 暫停索引,更新後恢復.避免在更新的過程中涉及到索引的重建.批量更新,每更新一些記錄後及時進行提交動作.避免大量占用回滾段和或臨時表空間.建立一臨時的大的表空間用來應對這些更新動作 4 批量更新,每更新一些記錄後及時進行提交動作....

oracle中插入大批量資料

方法一 建立乙個表,並同時新增1000000條資料,create table testtable as select rownum as id,to char sysdate rownum 24 3600,yyyy mm dd hh24 mi ss as inc datetime,trunc dbm...