使用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/31520497/viewspace-2156732/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- exp和expdp的filesize引數的使用--匯出多個檔案
- Oracle資料庫匯入匯出。imp匯入命令和exp匯出命令Oracle資料庫
- oracle資料匯出匯入(exp/imp)Oracle
- Oracle使用資料泵expdp,impdp進行資料匯出匯入Oracle
- 如何確定一個dmp檔案是exp匯出的還是expdp匯出的?
- Oracle資料泵匯出匯入(expdp/impdp)Oracle
- expdp在匯出時對資料大小進行評估
- Oracle expdp資料泵遠端匯出Oracle
- oracle按照表條件expdp匯出資料Oracle
- 【ASK_ORACLE】一眼判斷出Oracle的dmp檔案是用expdp匯出還是exp匯出Oracle
- 使用Dbeaver 進行資料的匯入和匯出
- 【資料泵】EXPDP匯出表結構(真實案例)
- Oracle 12c expdp和impdp匯出匯入表Oracle
- Mongodb資料的匯出與匯入MongoDB
- 資料泵expdp匯出遇到ORA-01555和ORA-22924問題的分析和處理
- 匯入和匯出AWR的資料
- exp匯出遭遇IMP-00020
- SQL資料庫的匯入和匯出SQL資料庫
- Oracle資料泵的匯入和匯出Oracle
- exp匯出報錯EXP-00106問題處理
- SQL與Pandas大資料分析效能對比(Haki Benita)SQL大資料
- oracle10g expdp資料泵的bug,按schema匯出,匯入impdp時無jobOracle
- JavaScript中AMD和ES6模組的匯入匯出對比JavaScript
- expdp 匯出時指定節點
- 基於flashback_scn的expdp匯出
- Mysql 資料庫匯入與匯出MySql資料庫
- Mobx 與 Redux 的效能對比Redux
- mysql匯入匯出指令碼的區別對比MySql指令碼
- exp匯出表中特定條件的表
- 報表工具對比選型系列——列印與匯出
- expdp匯出報錯ORA-39127
- [oracle] expdp 匯出分割槽表的分割槽Oracle
- Oracle 12.1.0.2 expdp匯出分割槽表資料遇到BUG慢的原因和解決方法Oracle
- MySQL入門--匯出和匯入資料MySql
- ClickHouse 資料表匯出和匯入(qbit)
- Apache 與 Nginx 效能對比:Web 伺服器最佳化技術ApacheNginxWeb伺服器
- plsql developmer 匯出資料和生成資料SQLdev
- TIDB和MySQL效能對比TiDBMySql