您好,登錄后才能下訂單哦!
這篇文章主要介紹使用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愛好者的測試結果來看,確實差別非常大。
以上是“使用Exp和Expdp導出數據的性能有什么區別”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。