熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

OracleExpImp導入導出工具性能調優

2013-11-13 16:18:22  來源: Oracle 

   Exp調優

   使用DIRECT和RECORDLENGTH選項

  DIRECT參數定義了導出是使用直接路徑方式(DIRECT=Y)還是常規路徑方式(DIRECT=N)常規路徑導出使用SQL SELECT語句從表中抽取數據直接路徑導出則是將數據直接從磁盤讀到PGA再原樣寫入導出文件從而避免了SQL命令處理層的數據轉換過程大大提高了導出效率在數據量大的情況下直接路徑導出的效率優勢更為明顯可比常規方法速度提高三倍之多

  和DIRECT=Y配合使用的是RECORDLENGTH參數它定義了Export I/O緩沖的大小作用類似於常規路徑導出使用的BUFFER參數建議設置RECORDLENGTH參數為最大I/O緩沖(kb)其用法如下

         exp userid=system/manager full=y direct=y recordlength= file=exp_fulldmp log=exp_fulllog  直接路徑導出根據Oracle版本不同有一些使用限制比較重要的限制有i及以下版本不支持導出客戶端和數據庫的字符集轉換因此導出前必須保證NLS_LANG設置正確;及以下版本不支持導出含LOBs對象的表;不能使用QUERY參數等

   使用管道技術

  管道是從一個程序進程向另一個程序進程單向傳送信息的技術通常管道把一個進程的輸出傳給另一進程作為輸入如果導出的數據量很大可以利用管道直接生成最終的壓縮文件所耗費的時間和不壓縮直接導出的時間相當這樣一來不僅能夠解決磁盤空間不足的問題而且省去了單獨壓縮文件的時間;如果需要傳輸導出文件還可以減少網絡傳輸的時間比如一個G的文件單獨壓縮可能需要半小時以上的時間雖然管道技術不能夠直接縮短Exp/Imp本身的時間但節省出來的壓縮時間非常可觀管道和Exp結合的具體使用方法如下

  導出數據示例

  

        % mknod /tmp/exp_pipe p # Make the pipe

  % compress < /tmp/exp_pipe > exportdmpZ & # Background compress

  % exp file=/tmp/exp_pipe # Export to the pipe

   Imp調優

  Oracle Import進程需要花比Export進程數倍的時間將數據導入數據庫某些關鍵時刻導入是為了應對數據庫的緊急故障恢復為了減少宕機時間加快導入速度顯得至關重要沒有特效辦法加速一個大數據量的導入但我們可以做一些適當的設定以減少整個導入時間

   使用管道技術

  前面已經說明了Exp時如何使用管道在導入時管道的作用是相同不僅能夠解決磁盤空間不足的問題而且省去了單獨解壓縮文件的時間在大數據量導入導出的時候推薦一定要使用管道

  導入數據示例

         % mknod /tmp/imp_pipe p # Make the pipe

  % uncompress < exportdmpZ > /tmp/imp_pipe & # Background uncompress

  % imp file=/tmp/imp_pipe # Import from the pipe



  2.2 避免I/O競爭

  Import是一個I/O密集的操作,避免I/O競爭可以加快導入速度。Tw.WiNGwIt.cOM如果可能,不要在系統高峰的時間導入數據,不要在導入數據時運行job等可能競爭系統資源的操作。

  2.3 增加排序區

  Oracle Import進程先導入數據再創建索引,不論INDEXES值設為YES或者NO,主鍵的索引是一定會創建的。創建索引的時候需要用到排序區,在內存大小不足的時候,使用臨時表空間進行磁盤排序,由於磁盤排序效率和內存排序效率相差好幾個數量級。增加排序區可以大大提高創建索引的效率,從而加快導入速度。

  8i及其以下版本:導入數據前增加數據庫的sort_area_size大小,可設為正常值的5-10倍。但這個值設定會影響到所有會話,設的過高有可能導致內存不足出現paging, swapping現象。更為穩妥的方法是,對於大表和索引特別多的表,只導數據不導索引。導完數據後,創建一個會話,設定當前會話的sort_area_size一個足夠大的值,再手工創建索引。

  9i:在workarea_size_policy=AUTO的情況下,所有會話的UGA共用pga_aggregate_target定義的內存,不必單獨設定sort_area_size。導入數據前增加pga_aggregate_target大小,如果機器內存夠大,可從通常設定的500M提高到1-2G。pga_aggregate_target大小可以動態調整,導入完成後可在線調回原值。

  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  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=n

  imp user2/pwd fromuser=user1 touser=user2 file=/tmp/imp_index_pipe1 commit=y feedback=10000 buffer=10240000 ignore=y rows=n indexes=y

  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。


From:http://tw.wingwit.com/Article/program/Oracle/201311/18115.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.