impdp hangs,慎用impdp parallel引數

531968912發表於2016-07-27

        公司有個專案的資料庫有幾張大表,每張表都是幾億條資料,之前一直未做分割槽,隨著資料量的不斷增大,維護越發困難,為了更好的管理這些表資料,決定為這些大表做分割槽表,以天為單位進行分割槽,將原有的資料追加到新的分割槽表,考慮使用expdp和impdp的配合完成這項工作。
        由於表的資料量太大,為了提高匯出匯入的效能,考慮在執行匯出匯入命令的時候都加了parallel的引數,系統透過並行提高匯出匯入的效能。但萬萬沒有想到就是這麼一個看上去不會引起問題的引數卻導致了很多問題。下面是過程描述:
        資料庫的環境:AIX ORACLE RAC 10.2.0.4。
        出現問題的現象:執行impdp命令的時候加入了parallel=2的引數,那麼在會話中會產生多個會話同時執行impdp工作,在資料匯入一段時間後,發現某個會話一直處於空閒事件"wait for unread message on multiple broadcast channel"狀態,自此之後IMPDP開始Hang住,等待數小時沒有任何的反應,最後只得將其Kill掉。
        解決方法:後來猜想會不會由於一個會話一直等待另一個會話的"channel"而卡死,回想之前匯入成功過,並未加parallel引數,再次嘗試不使用parallel引數匯入資料,結果很快就完成的表資料的匯入。
        查Metalink資料,貌似這是一個bug,由此可以看出,在Oracle資料庫中,使用並行特性一定要謹慎,經過測試方可使用。
        使用impdp的parallel引數可能帶來以下問題:
        1).遇到上面的bug。
        2).如果是匯入某一張表,那麼設定並行是沒效果的,只會有一個worker會完成資料的匯入,反而可能影響匯入的效能。
        3).並行設定不合理在匯入開始的時候即會收到奇怪的報錯資訊(例如,無法分配xxx bytes記憶體空間的報錯)。
        4).Oracle的並行設定不光是在impdp命令下會出現問題,在其他場合下使用並行也可能出現問題,例如,並行查詢資料等,所以需要慎用並行特性。

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

相關文章