您好,登錄后才能下訂單哦!
這篇文章主要介紹“Oracle數據加載速度的優化方法”,在日常操作中,相信很多人在Oracle數據加載速度的優化方法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Oracle數據加載速度的優化方法”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
【說明】本文檔介紹如何將大量的數據加載到一張表中,并需要盡可能地插入新數據;
【解決方法】
將表的日志屬性設置為NOLOGGING。
在使用子查詢來確定要插入哪些記錄時,在查詢中加入INSERT /*+ APPEND */
使用VALUES子句的查詢中加入INSERT /*+ APPEND */
使用CREATE TABLE ... AS SELECT語句。
【實驗測試】
1、創建測試表
SQL> create table T01 as select * from all_users where 1=0;
2、查看表的狀態
SQL> select table_name, logging from user_tables where table_name = 'T01';
TABLE_NAME LOG
------------- ----------------
T01 YES
3、修改表為NOLOGGING
alter table T01 nologging;
4、創建表TT并插入大量的數據,用于等下對比用;
SQL> create table TT as select * from all_users ;
SQL> INSERT INTO TT SELECT * FROM TT; (反復執行)
SQL> SELECT COUNT(1) FROM TT;
COUNT(1)
----------
1245184
5、創建對比表T02,沒有進行任何優化操作;
SQL> create table T02 as select * from all_users where 1=0;
6、進行數據的插入測試
采用直接路徑操作與NOLOGGING的方法:消耗的時間時6.15s
SQL> timing start kk
SQL> insert /*+ APPEND */ into t01 select * from TT;
1245184 rows created.
SQL> timing show;
Elapsed: 00:00:06.15
常規的方法,顯示需要的時間為:15.39
SQL> timing start kk ;
SQL> insert /*+ APPEND */ into t02 select * from TT;
1245184 rows created.
SQL> timing show;
timing for: kk
Elapsed: 00:00:15.39
總結:經過測試通過直接路徑插入和nologging的方式確實可以明顯的提升數據的加載速度;
1、因為通過nologging可以產生最少量的重做;
2、避開了緩沖區緩存,直接將數據加載到數據文件中,提高了加載的效率。
但是同時這種方法也存在著以下的問題,畢竟不能什么好事都占完吧。不然oracle早就設置成默認的配置了;
當使用直接路徑向表中插入數據的時候,Oracle將會自動把心的數據行插入到高水位線之上,這可能導致表占用大量的磁盤空間;
確保提交了通過直接路徑加載的數據,否則將不能看到這些數據。因為Oracle會報0RA-12838的錯誤,表明直接路徑加載的數據在能夠查詢之前必須先提交。
如果T01數據插入之后(插入之前有進行備份),系統由于介質故障需要進行恢復,這個時候把表RESTORE到故障之前,然后再RECOVER恢復到故障點,這個時候表T01的數據是不能被恢復的;
【總結】以上這種數據的加載方式并不適用于生產過程中的重要業務數據,比較適合一些類似報表類或中間庫的數據抽取或比對數據的抽取;
到此,關于“Oracle數據加載速度的優化方法”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。