溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Oracle數(shù)據(jù)加載速度的優(yōu)化方法

發(fā)布時(shí)間:2021-08-20 19:56:28 來源:億速云 閱讀:270 作者:chen 欄目:關(guān)系型數(shù)據(jù)庫

這篇文章主要介紹“Oracle數(shù)據(jù)加載速度的優(yōu)化方法”,在日常操作中,相信很多人在Oracle數(shù)據(jù)加載速度的優(yōu)化方法問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”O(jiān)racle數(shù)據(jù)加載速度的優(yōu)化方法”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

【說明】本文檔介紹如何將大量的數(shù)據(jù)加載到一張表中,并需要盡可能地插入新數(shù)據(jù);

【解決方法】

  • 將表的日志屬性設(shè)置為NOLOGGING。

  • 在使用子查詢來確定要插入哪些記錄時(shí),在查詢中加入INSERT /*+ APPEND */

  • 使用VALUES子句的查詢中加入INSERT /*+ APPEND */

  • 使用CREATE TABLE ... AS SELECT語句。


【實(shí)驗(yàn)測(cè)試】
1、創(chuàng)建測(cè)試表
SQL> create table T01  as select * from all_users where 1=0;

2、查看表的狀態(tài)
SQL> select table_name, logging  from user_tables    where table_name = 'T01';

TABLE_NAME       LOG
-------------   ---------------- 
T01          YES

3、修改表為NOLOGGING
alter table T01 nologging;

4、創(chuàng)建表TT并插入大量的數(shù)據(jù),用于等下對(duì)比用;
SQL> create table TT as select * from all_users ;
SQL> INSERT INTO TT SELECT * FROM TT;  (反復(fù)執(zhí)行)
SQL> SELECT COUNT(1) FROM TT;  
  COUNT(1)
----------
   1245184

5、創(chuàng)建對(duì)比表T02,沒有進(jìn)行任何優(yōu)化操作;
SQL> create table T02 as select * from all_users where 1=0;

6、進(jìn)行數(shù)據(jù)的插入測(cè)試


采用直接路徑操作與NOLOGGING的方法:
消耗的時(shí)間時(shí)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

常規(guī)的方法,顯示需要的時(shí)間為: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

總結(jié):經(jīng)過測(cè)試通過直接路徑插入和nologging的方式確實(shí)可以明顯的提升數(shù)據(jù)的加載速度;

1、因?yàn)橥ㄟ^nologging可以產(chǎn)生最少量的重做;

2、避開了緩沖區(qū)緩存,直接將數(shù)據(jù)加載到數(shù)據(jù)文件中,提高了加載的效率。


但是同時(shí)這種方法也存在著以下的問題,畢竟不能什么好事都占完吧。不然oracle早就設(shè)置成默認(rèn)的配置了;

  • 當(dāng)使用直接路徑向表中插入數(shù)據(jù)的時(shí)候,Oracle將會(huì)自動(dòng)把心的數(shù)據(jù)行插入到高水位線之上,這可能導(dǎo)致表占用大量的磁盤空間;

  • 確保提交了通過直接路徑加載的數(shù)據(jù),否則將不能看到這些數(shù)據(jù)。因?yàn)镺racle會(huì)報(bào)0RA-12838的錯(cuò)誤,表明直接路徑加載的數(shù)據(jù)在能夠查詢之前必須先提交。

  • 如果T01數(shù)據(jù)插入之后(插入之前有進(jìn)行備份),系統(tǒng)由于介質(zhì)故障需要進(jìn)行恢復(fù),這個(gè)時(shí)候把表RESTORE到故障之前,然后再RECOVER恢復(fù)到故障點(diǎn),這個(gè)時(shí)候表T01的數(shù)據(jù)是不能被恢復(fù)的;

【總結(jié)】以上這種數(shù)據(jù)的加載方式并不適用于生產(chǎn)過程中的重要業(yè)務(wù)數(shù)據(jù),比較適合一些類似報(bào)表類或中間庫的數(shù)據(jù)抽取或比對(duì)數(shù)據(jù)的抽取;

到此,關(guān)于“Oracle數(shù)據(jù)加載速度的優(yōu)化方法”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI