優化資料庫EXP的效率

charsi發表於2010-11-08

如何提高EXP檔案的效率?有時候我們可能會遇到這類的問題

首先,我們通常的做法是提高buffer,如下,我設定了10M的buffer
exp charsi/charsi tables=tst_exp file=tst_exp.dmp log=tst_exp.log buffer=10240000
開始時間:Mon Nov 8 10:09:26 CST 2010
結束時間:Mon Nov 8 10:09:35 CST 2010
如下,我測試一個70M的表使用exp花了9秒的時間.
當然可以將buffer設定的再大一些可能還會提高一些效率,但是當buffer設定到一定大的時候,再往大設定就不能起作用了.

其次,還可以設定另外一個引數DIRECT和RECORDLENGTH
需要注意的是,如果同時設定direct和buffer引數,則只會有一個起作用,如果設定direct引數,那麼效率會更高一些,但是direct的方法只適合於全表匯出,對於帶條件的匯出方法則不會起作用.
如下:
exp charsi/charsi tables=tst_exp file=tst_exp_dir.dmp log=tst_exp_dir.log direct=Y RECORDLENGTH=65535
開始時間:Mon Nov 8 10:12:28 CST 2010
結束時間:Mon Nov 8 10:12:33 CST 2010

同樣的一張表,同樣的環境,使用direct的方法,只花費了5秒鐘時間.

那麼,如果我把檔案匯出後還需要把檔案壓縮怎麼辦?
可以使用管道直接將生成的dmp檔案在記憶體中壓縮,exp的示例如下(將下面內容拷貝到一個shell指令碼中):
mknod tst_exp_dir_p p
gzip tst_exp_dir_p.dmp.gz &
exp charsi/charsi tables=tst_exp file=tst_exp_dir_p log=tst_exp_dir.log direct=Y RECORDLENGTH=65535
rm -f tst_exp_dir_p
開始時間:Mon Nov 8 10:07:59 CST 2010
結束時間:Mon Nov 8 10:08:06 CST 2010

可以看到匯出到壓縮總共花費的時間為7秒鐘

同樣,匯入的時候也可以使用管道方式,指令碼如下:
mknod tst_imp_dir_p p
gunzip tst_imp_dir_p &
imp charsi/charsi tables=tst_exp file=tst_imp_dir_p log=tst_imp_dir.log buffer=10240000 ignore=Y
rm -f tst_imp_dir_p
開始時間:Mon Nov 8 10:26:11 CST 2010
結束時間:Mon Nov 8 10:26:29 CST 2010

本測試主要是針對10g以前的Oracle資料庫平臺的測試,到Oracle 10g以後,新的匯入匯出工具expdb/impdp可能會有更優的方法來提高匯入匯出效率.

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23850820/viewspace-1041136/,如需轉載,請註明出處,否則將追究法律責任。

相關文章