使用Exp和Expdp匯出資料的效能對比與優化
1.前言
資料備份對資訊系統的安全執行至關重要,我們的使用者中,使用RMan或第三方專業備份軟體的越來越多,但是很多使用者仍然保留了傳統的Exp作為備份策略的一部分,主要是由於這種備份方式簡單易用,而且恢復到其他機器上也很方便,所以,雖然有其他的備份方式,但是Exp方式仍然會同時使用,甚至還有不少的使用者只有這種備份方式(可能因為他們覺得掌握其他技術太複雜)。
隨著使用者的資料量增長,Exp匯出方式存在的問題也日漸突出,主要就是耗時長,有的甚至超過3個小時,加上常見的後臺自動作業:彙總表的計算,自動費用的計算,統計資訊的收集等工作,使一個晚上的時間安排越來越緊張。
有沒有辦法提高Exp執行的效能呢?以前我做過一些試驗,查閱了很多資料,總結過一些經驗,最近拿到了一個使用者的近300G資料,再次進行了一系列大資料量的匯出對比試驗,發現幾個引數的設定對Exp匯出耗時的影響較大,經過優化後,Exp匯出的效能得到了較大提升,但是與Expdp相比,仍然是後者要快得多,下面將試驗情況和相關知識做一個介紹,以便我們在幫助使用者制定備份策略時參考。
2.試驗情況
2.1試驗環境
硬體:
CPU :至強5405,4*2G
記憶體:DDR2,4G
硬碟:IDE 1T
軟體:Windows+Oracle 10.2.0.3
資料:XX醫院全庫匯入的ZLHIS10.30資料,原始共300G,經過收縮回滾表空間、臨時表空間,以及一些表空間檔案未使用的空間後,總共佔用267G,其中包含了大量電子病歷相關的LOB資料。
其他說明:由於該院使用時間較長,DB Control Repository包含了大量歷史監控資料,表SYSMAN.MGMT_METRICS_RAW中的1300萬條LOB格式資料,僅該表的匯入耗時超過24小時,為了便於測試,清空了該表的資料。
2.2試驗方法
在相同環境下,試驗4種不同的匯出資料的方式的耗時
1) 使用Exp常規路徑匯出,不加引數優化
2) 使用Exp直接路徑匯出,不加引數優化
3) 使用Exp直接路徑匯出,引數優化
4) 使用Expdp匯出,引數優化
2.3試驗結果
方式 |
耗時 |
說明 |
Exp常規路徑,未優化 |
5小時15分 |
不加引數 |
Exp直接路徑,未優化 |
2小時38分 |
direct=y |
Exp直接路徑,優化 |
1小時40分 |
direct=y recordlength=65535 buffer=104857600 |
Expdp,優化 |
59分 |
parallel=3 dumpfile= expdp_0225_1.dmp,expdp_0225_2.dmp, expdp_0225_3.dmp |
結果表明:
速度最快的是Expdp方式,而Exp方式經過引數優化後,相對於不加任何引數的情況,快了近3倍。
下面對相關的原理及引數進行詳細說明。
3.原理說明
Exp預設是傳統路徑,這種模式下,是用Select來查詢資料,然後寫入buffer cache,在將這些資料寫入evaluate buffer,最後傳到Export客戶端,再寫入dump檔案。
直接路徑模式下,直接從硬碟讀取資料,然後寫入PGA,格式就是Export的格式,不需要轉換,資料再直接傳到Export客戶端,寫入dump檔案。這種模式沒有經過evaluation buffer,少了一個過程,匯出速度提高也是很明顯。
Exp沒有並行引數,要進行並行匯出,可以寫多條命令同時匯出,這種方式可用於特定的資料遷移情況,按表或表空間進行快速資料遷移。
Expdp是Oracle 10G上推出的一種先進的資料匯出方式,比Exp有較大的效能提升,Expdp可以看成是Exp的升級版,相當於exp + direct mode + parallel。
Expdp預設是直接路徑方式,它有4種方式,另外3種分別是:
外部表模式(相當於Exp的常規路徑匯出);
資料檔案拷貝模式(表空間傳輸);
網路鏈路匯入(通過資料鏈路匯出匯入)
一般情況可以替代Exp,但是還無法完全替代,主要是它需要在資料庫伺服器上執行,而Exp可以在任何一臺客戶端上執行。另外,據測試,Expdp在匯出大型分割槽表(1T以上)的時候,光是分析的時間就超過2個小時,而且存在一些BUG。所以,有些使用者仍然會使用Exp來進行資料備份。
4. 引數優化
Exp相關引數
通過上面的分析,我們知道採用“直接路徑”可以提高匯出速度,這種模式重點說明2個引數:DIRECT和RECORDLENGTH引數。
DIRECT引數定義了匯出是使用直接路徑方式(DIRECT=Y),還是常規路徑方式(DIRECT=N)。常規路徑匯出使用SELECT語句從表中抽取資料,評估後再寫入,而直接路徑匯出則是將資料直接從磁碟讀到PGA再原樣寫入匯出檔案,從而避免了SQL命令處理層的資料轉換過程,大大提高了匯出效率。
BUFFER引數用於設定了讀取記錄的快取的大小,以位元組為單位,即在array中最大數量的記錄,該引數只對常規路徑模式匯出有效。
RECORDLENGTH引數是跟DIRECT=Y配合使用的引數,它定義了Export I/O緩衝的大小,作用類似於常規路徑匯出使用的BUFFER引數。建議設定RECORDLENGTH引數為最大I/O緩衝,即65535(64kb)。
需要強調是即使用直接路徑匯出模式,其中涉及LOB物件的表只會通過傳統模式匯出,所以,DIRECT=Y時,除了設定RECORDLENGTH引數之外,也需要設定BUFFER引數,一般情況可設定為104857600(100M),這一點是網上很多優化文章所忽略的。
另外,還可以修改Oracle初始化引數Multiple Block Read來提交讀取資料的效能,經測試,效果不是很明顯,前面的測試環境下,可減少10分鐘左右的耗時。
按照上面的引數優化設定,下面給出一個匯出指令碼示例:
exp userid=sys/his@zyyy full=y direct=y recordlength=65535 buffer=104857600 file=F:\zyyy\exp20120218.dmp log=F:\zyyy\exp20120218.log feedback=10000
Expdp相關引數
這裡只說明兩個引數:Parallel和Dumpfile
Parallel引數指明瞭匯出並行度,根據CPU的個數進行設定,預設是1,如果不設定,匯出效能與Exp的直接路徑匯出模式差不了多少,就沒有發揮出它的優勢。
Dumpfile引數可配合Parallel引數指定多個匯出檔案,用於減少併發寫入時的IO爭用。
結合這兩個引數,下面給出一個匯出指令碼示例:
SQL>create directory dump_dir as 'F:\data\zyyy';
Cmd:
expdp sys/his@zyyy full=y directory=dump_dir parallel=3
dumpfile=expdp_0225_1.dmp,expdp_0225_2.dmp,expdp_0225_3.dmp logfile=expdp_0225.log
5.小結
如果你仍然習慣使用Exp方式,如果要減少耗時,最好採用直接路徑方式,並且設定RECORDLENGTH和BUFFER兩個引數的值,可以大大提高匯出效能。 如果你掌握了Expdp方式,使用合適的Parallel引數,實現快速匯出,更重要的是Impdp的效能提升才是資料泵模式的真正優勢所在,從一些Oracle愛好者的測試結果來看,確實差別非常大。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30208428/viewspace-2121036/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用Exp和Expdp匯出資料的效能對比與最佳化
- 【原創】比較資料泵和exp/imp對相同資料匯出/匯入的效能差異
- exp/imp 與 expdp/impdp 對比 及使用中的一些優化事項優化
- EXP,EXPDP資料匯入本地效能測試
- 10g資料泵和匯入匯出效能對比(三)
- 10g資料泵和匯入匯出效能對比(二)
- 10g資料泵和匯入匯出效能對比(一)
- 10g資料泵和匯入匯出效能對比(四)
- 10g資料泵和匯入匯出效能對比(六)
- 10g資料泵和匯入匯出效能對比(五)
- exp和expdp的filesize引數的使用--匯出多個檔案
- 針對資料泵匯出 (expdp) 和匯入 (impdp)工具效能降低問題的檢查表
- expdp 使用QUERY 匯出部分資料。
- 【EXP】資料庫只讀模式下如何使用exp和expdp資料庫模式
- 抽取exp/expdp匯出檔案頭的資訊
- 使用資料泵工具expdp工具匯出資料
- shell,ant指令碼實現自動資料泵(exp.expdp)匯出匯入資料指令碼
- 【EXPDP/IMPDP】使用 EXPDP/IMPDP工具“模糊”匯出和匯入
- 【EXP】使用EXP的QUERY選項匯出表中部分資料
- 【EXP/IMP】使用EXP /IMP工具“模糊”匯出和匯入
- 資料匯入匯出EXP/IMP
- exp/imp匯出匯入資料
- expdp匯出表的部分資料
- expdp中使用include或者exclude匯出資料
- oracle資料的匯入匯出imp/expOracle
- Oracle使用資料泵expdp,impdp進行資料匯出匯入Oracle
- Oracle資料庫匯入匯出。imp匯入命令和exp匯出命令Oracle資料庫
- expdp遠端匯出資料
- 使用Oracle 的 imp ,exp 命令實現資料的匯入匯出Oracle
- oracle資料匯出匯入(exp/imp)Oracle
- Oracle資料泵匯出匯入(expdp/impdp)Oracle
- Oracle資料匯入匯出imp/exp命令Oracle
- expdp在匯出時對資料大小進行評估
- Oracle的expdp/impdp工具和exp/imp工具比較Oracle
- Oracle exp只匯出部分資料Oracle
- 使用EXPDP/IMPDP匯入匯出表中資料/後設資料測試
- 資料泵 EXPDP 匯出工具的使用
- exp/imp匯出匯入工具的使用