如何加快exp imp的速度

2021-05-23 09:24:12 字數 3375 閱讀 7755

oracle9i 或 10g  . 

1.  記憶體中關係到exp的速度的是  large_pool_size , 適當設定大一些   

2.  適當加大exp 時的 buffer  

itpub個人空間 [ |4f wiffg5u

2. direct=y 快,是因為是直接路徑,資料不需要經過記憶體進行整合和檢查. 

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

1 exp調優

1.1 使用direct和recordlength選項

direct引數定義了匯出是使用直接路徑方式(direct=y),還是常規路徑方式(direct=n)。常規路徑匯出使用sqlselect語句從表中抽取資料,直接路徑匯出則是將資料直接從磁碟讀到pga再原樣寫入匯出檔案,從而避免了sql命令處理層的資料轉換過程,大大提高了匯出效率。在資料量大的情況下,直接路徑匯出的效率優勢更為明顯,可比常規方法速度提高三倍之多。

和direct=y配合使用的是recordlength引數,它定義了export i/o緩衝的大小,作用類似於常規路徑匯出使用的buffer引數。建議設定recordlength引數為最大i/o緩衝,即65535(64kb)。其用法如下:

exp userid=system/manager full=y direct=y recordlength=65535 file=exp_full.dmp log=exp_full.logitpub個人空間)o^'p9t3bj0qjv~

直接路徑匯出根據oracle版本不同,有一些使用限制。比較重要的限制有,8i及以下版本不支援匯出客戶端和資料庫的字符集轉換,因此匯出前必須保證nls_lang設定正確;8.1.5及以下版本不支援匯出含lobs物件的表;不能使用query引數等。

1.2 使用管道技術

管道是從乙個程式程序向另乙個程式程序單向傳送資訊的技術。通常,管道把乙個程序的輸出傳給另一程序作為輸入。如果匯出的資料量很大,可以利用管道直接生成最終的壓縮檔案,所耗費的時間和不壓縮直接匯出的時間相當。這樣一來,不僅能夠解決磁碟空間不足的問題,而且省去了單獨壓縮檔案的時間;如果需要傳輸匯出檔案,還可以減少網路傳輸的時間。比如,乙個10g的檔案單獨壓縮可能需要半小時以上的時間。雖然管道技術不能夠直接縮短exp/imp本身的時間,但節省出來的壓縮時間非常可觀。管道和exp結合的具體使用方法如下:

匯出資料示例:

% mknod /tmp/exp_pipe p # make the pipe

*[sjhsxa0  % compress < /tmp/exp_pipe > export.dmp.z &                # background compress

% exp file=/tmp/exp_pipe             # export to the pipeitpub個人空間s _"k&u+o? x1i@(e

itpub個人空間)`~#v&|7v0cb%x

2 imp調優

oracle import程序需要花比export程序數倍的時間將資料匯入資料庫。某些關鍵時刻,匯入是為了應對資料庫的緊急故障恢復。為了減少宕機時間,加快匯入速度顯得至關重要。沒有特效辦法加速乙個大資料量的匯入,但我們可以做一些適當的設定以減少整個匯入時間。

2.1 使用管道技術

前面已經說明了exp時如何使用管道,在匯入時管道的作用是相同,不僅能夠解決磁碟空間不足的問題,而且省去了單獨解壓縮檔案的時間。在大資料量匯入匯出的時候,推薦一定要使用管道。

匯入資料示例:

table>

2.2 避免i/o競爭

import是乙個i/o密集的操作,避免i/o競爭可以加快匯入速度。如果可能,不要在系統高峰的時間匯入資料,不要在匯入資料時執行job等可能競爭系統資源的操作。

2.3 增加排序區

oracle import程序先導入資料再建立索引,不論indexes值設為yes或者no,主鍵的索引是一定會建立的。建立索引的時候需要用到排序區,在記憶體大小不足的時候,使用臨時表空間進行磁碟排序,由於磁碟排序效率和記憶體排序效率相差好幾個數量級。增加排序區可以大大提高建立索引的效率,從而加快匯入速度。

2.4 調整buffer選項

imp引數buffer定義了每一次讀取匯出檔案的資料量,設的越大,就越減少import程序讀取資料的次數,從而提高匯入效率。buffer的大小取決於系統應用、資料庫規模,通常來說,設為百兆就足夠了。其用法如下:

imp user2/pwd fromuser=user1 touser=user2 file=/tmp/imp_db_pipe1 commit=y feedback=10000 buffer=10240000

s'l+h-ud er0  2.5 使用commit=y選項

commit=y表示每個資料緩衝滿了之後提交一次,而不是導完一張表提交一次。這樣會大大減少對系統回滾段等資源的消耗,對順利完成匯入是有益的。

2.6 使用indexes=n選項

前面談到增加排序區時,說明imp程序會先導入資料再建立索引。匯入過程中建立使用者定義的索引,特別是表上有多個索引或者資料表特別龐大時,需要耗費大量時間。某些情況下,需要以最快的時間匯入資料,而索引允許後建,我們就可以使用indexes=n 只匯入資料不建立索引,從而加快匯入速度。

我們可以用indexfile選項生成建立索引的dll指令碼,再手工建立索引。我們也可以用如下的方法匯入兩次,第一次匯入資料,第二次匯入索引。其用法如下:

imp user2/pwd fromuser=user1 touser=user2 file=/tmp/imp_db_pipe1 commit=y feedback=10000 buffer=10240000 ignore=y rows=y indexes=nitpub個人空間 sw'n a[m~$yaj

imp user2/pwd fromuser=user1 touser=user2 file=/tmp/imp_index_pipe1 commit=y feedback=10000 buffer=10240000 ignore=y rows=n indexes=yitpub個人空間{(ur@4hypr

mk/j zl i/f7r0  2.7 增加  large_pool_size

如果在init.ora中配置了mts_service,mts_dispatchers等引數,tnsnames.ora中又沒有(server=dedicated)的配置,那麼資料庫就使用了共享伺服器模式。在mts模式下,exp/imp操作會用到large_pool,建議調整large_pool_size到150m。

檢查資料庫是否在mts模式下:

sql>select distinct server from v$session;

如果返回值出現none或shared,說明啟用了mts。

buffer 僅僅對常規路徑匯出有效,對直接路徑匯出沒有效 。

如何加快oracle匯入速度

color darkred 傳統的imp命令在匯入時,如果只是僅處理資料,千萬條資料對oracle的處理來說根本就是 毛毛雨 啦,關鍵是在它匯入了資料後,而要對每個表重新做一次索引。一邊導一邊索引,一邊一條條commit,就好比你用乙個迴圈來insert 1萬條資料和你改用statemenet.ad...

如何加快oracle匯入速度

如何加快oracle匯入速度 傳統的imp命令在匯入時,如果只是僅處理資料,千萬條資料對oracle的處理來說根本就是 毛毛雨 啦,關鍵是在它匯入了資料後,而要對每個表重新做一次索引。www.2cto.com 一邊導一邊索引,一邊一條條commit,就好比你用乙個迴圈來insert 1萬條資料和你改...

如何加快Oracle建立索引的速度

如何加快建立索引的速度 總結一下 1。使用並行引數,8個cpu,可以用parallel 6 最多占用6個cpu,正常情況下沒問題 前提是其他應用沒有佔超過2個cpu的資源 2。nologging,絕對應該使用,會使速度大幅上公升。減少大量redo log 3。pga,普通的auto pga最大才10...