【Data Pump】Data Pump的並行引數原理

恩強Boy發表於2020-12-02

思路清晰

1.  本文介紹

2.  parallel 引數

3.  主程式、工作程式

4.  dump file

5.  直接路徑讀和外部表

6.  expdp parallel 引數原理

7.  impdp parallel 引數原理

8.  parallel 引數的使用規則

9.  總結

1.  介紹

Oracle Data Pump (資料泵)。可用於 Oracle 10g 及以上版本,可以非常快速地將資料和後設資料從一個庫遷移至另一個庫。 Data Pump 一個最有用的功能是使 expdp impdp 進行並行,以最大效能地工作。本文主要討論了 Data Pump parallel 引數是怎樣工作的,並且使用者可以如何對這個引數進行最佳化。

2.  parallel 引數

expdp impdp 使用 parallel 引數,僅支援在 oracle 企業級資料庫中。它對於具有大量後設資料的大型任務最為重要,這些任務一般不會並行載入,有時是可以並行載入的。在以下兩種情況中,後設資料是可以並行載入:

可以並行載入package bodies

一個程式建立所有的索引,使用並行以加快速度,並行執行程式可以顯著地減少大型索引的消耗時間

Data Pump 技術中,一個表的資料物件是基於儲存單元。如果一個表沒有分割槽,這個表的資料物件就是這個表本身;如果一個表是分割槽表,但是沒有子分割槽,那麼每個分割槽都有一個表資料物件;如果一個分割槽表有子分割槽,那麼同樣每一個分割槽都有一個表資料物件。

Data Pump 使用多程式體系結構,其中主程式將作業分配給一個或多個工作程式,工作程式可以使用 PX 程式去移動資料。在本文中,並行度指的是能夠並行操作的工作程式和 PX 程式的總數。預設的 parallel 引數是 1 。如果 Data Pump 使用 PX 程式去載入一個表,根據 Data Pump 使用的並行度對 PX 程式進行計算。但是啟動程式的工作程式並不是這樣,啟動程式在 PX 程式執行時是空閒的。當然,如果一個工作程式已經啟動,但是是空閒的,它將不會計入 parallel 引數的指定限制。

3. 主程式 / 工作程式

Data Pump 在工作時會建立一個主程式,主程式透過與客戶端連線,啟動和控制工作程式池、執行日誌操作等來控制整個工作程式。

主程式會建立一個工作程式池來處理活動工作專案。主程式不會計入並行總數。在工作的過程中,並行度的等級會動態的增加或減少,這個是由使用者透過互動命令模式來完成。

減少並行度並不會導致與任務相關的工作程式減少,他只是減少了在給定時間內將要指定的工作程式數量。在減少量生效之前,任何正在進行的工作程式必須達到一個有序的完成階段。因此,可能需要一段時間才能看到減少並行的效果。直到作業退出,才能刪除空閒的 job

如果有job 可以由工作程式或 PX 程式並行執行,那麼增加並行度操作會立刻生效。如果沒有可以並行執行的工作,那麼就不會建立額外的工作程式,直到有需要額外工作程式的工作出現。

RAC 環境中,工作程式只在排程 job 的例項上啟動。需要注意的是,當程式部署 PX 程式時,這些程式可能會執行在 RAC 的其他節點上。

4.dump file

對於expdp ,指定的 parallel 引數值應該小於或等於 dump 檔案集的檔案數量。每一個工作程式或並行程式需要單獨佔用 dump 檔案,因此如果 dump 檔案的數量少於並行度,意味著有的工作程式和 PX 程式將無法寫入他們匯出的資訊。如果這種情況發生,工作程式將會進入一個空閒的狀態,並且不會進入任何工作狀態,直到有更多的檔案被新增到這個 job

對於impdp ,工作程式和 PX 程式可以從相同的檔案中讀取資料。但是如果沒有足夠的 dump 檔案,效能可能不是最佳的,因為多個執行執行緒將嘗試訪問相同的轉儲檔案,多個程式共享 dump 檔案的效能取決於儲存 dump 檔案的 I/O 子系統。因此, imppdp parallel 引數的值不應該明顯大於 dump 檔案的檔案數量,最好和 dump 檔案數量保持一致。

5. 直接路徑讀和外部表

Data Pump 支援兩種訪問方式去載入和解除安裝表資料:直接路徑讀和外部表方式。因為這兩種方法都支援相同的外部資料表示,所以用一個方法解除安裝的資料可以使用另一個方法載入。 Data Pump 提供了一個讀寫檔案的外部表訪問驅動程式,檔案的格式與直接路徑方法使用的格式相同。儘管外部表的單流效能比直接路徑慢,但是它對非常大的表和分割槽使用 Oracle 並行執行引擎,這是直接路徑無法做到的。

以下是Data Pump 使用外部表作為資料訪問方式的一些常見情況:

· 在可以使用並行 SQL 和請求並行 Data Pump 操作的情況下載入和解除安裝非常大的表和分割槽

· 載入或解除安裝包含型別為 BFILE 或不透明列的表,或包含不透明列的任何物件型別

· 載入或解除安裝具有加密列的表

· 使用 QUERY 引數解除安裝表

· 載入帶有活動觸發器的表

· 載入叢集表

· 載入為插入啟用了細粒度訪問控制的表

· 在分割槽表上載入具有全域性索引的表

6.expdp parallel 引數的工作原理

在同時包含後設資料和資料的典型expdp 中,第一個工作程式將解除安裝後設資料: tablespaces schemas grants roles tables indexes 等等。這個單程式解除安裝後設資料,其餘的工作程式同時解除安裝資料。如果後設資料解除安裝完成了,單仍然有資料物件需要解除安裝,那麼它也將開始解除安裝資料。本文的示例假設總是有一個工作程式在解除安裝後設資料時其他工作程式解除安裝表資料物件。

對於expdp 操作, Data Pump 估計匯出作業中的每個表資料物件將消耗多少磁碟空間(以位元組為單位),無論使用者是否使用 ESTIMATE 引數,都會執行此操作。這個估計值會列印在日誌檔案中,並顯示在客戶端的輸出裝置上。 這個估計值進用於表資料,不包括後設資料。 這個估計值用於確定有多少個PX 程式應用到表資料物件。

檢查表的列,以確定是否可以使用直接路徑、外部表或兩種方法同時使用。對於直接路徑,表資料物件的並行數總是1 ,因為直接路徑不支援表資料物件的並行載入, PX 程式只能用於外部表方式。

如果選擇了外部表方法,Data Pump 將會確定可以在表資料物件上工作的 PX 程式的最大數量。它將表資料物件的估計大小除以 250MB ,然後四捨五入得到的結果。如果結果是 0 1 ,則不使用 PX 程式來解除安裝表。例如,如果一個表的大小為 600MB ,則透過將估計大小除以 250MB ,並四捨五入來確定兩個並行執行程式。在這種情況下,還是會有兩個工作程式:一個用於後設資料,另一個用於資料。資料的工作程式充當 PX 程式的協調器,不計入並行總數。因此,在這種情況下,如果 expdp 的並行度是 3 ,那麼一個用於後設資料,兩個用於 PX 程式。如果此時使用者檢視日誌檔案或使用互動狀態命令來檢視工作程式在做什麼,那麼只有兩個工作程式是可見的,因為 PX 程式在 expdp impdp 中是不可見的。

如果另外一個表為400MB ,在這種情況下,沒有並行執行過程。當 400MB 除以 250MB 時,得到的並行值為 1 ,則該表將會使用直接路徑或外部表解除安裝資料,而不會存在任何並行度。

如果job 不夠大,無法使用最大並行度,則使用者將看不到工作程式和並行執行程式的最大數量。例如,如果有一個 800MB 的表,並且已經確定使用外部表,那麼將有一個工作程式用於後設資料,一個工作程式用於資料,包括 3 PX 程式。這種情況下,資料的工作程式充當 PX 程式的協調器,不計入程式總數。所以,如果使用者指定了 parallel=10 ,那麼並行度實際上是 4

7.impdp parallel 引數原理

parallel 引數在 expdp impdp 中的工作方式略有不同。因為在匯入期間建立物件時,各個物件存在各種依賴關係,所以一切必須按照順序進行。在 impdp 中,表建立完成前不能匯入資料,因為資料不能載入到不存在的表中。

impdp 匯入時,按照以下順序處理資料庫物件:

1) 第一個程式開始載入所有的後設資料:tablespaces schemas 等,直到所有的表被建立

2) 表建立完成後,所有的工作程式開始載入資料

3) 載入完表資料後,第一個工作程式返回再次載入後設資料,其餘的工作程式是空閒的,直到第一個工作程式將所有後設資料載入到package body

4) 多個工作程式同時載入package body

5) 一個工作程式載入後設資料到輔助表,也包括輔助表

6) 多個工作程式載入輔助表資料

7) 一個工作程式載入剩餘的後設資料

8.parallel 引數的使用原則

當使用parallel 引數時,應該參考以下原則;

· 將並行度設定為 CPU 數量的 2 倍,然後從這個值進行調優

· 對於 expdp parallel 引數值應該小於或等於 dump 檔案的數量

· 對於 impdp parallel 引數值不應大於 dump 檔案的數量

· parallel 引數只支援 Oracle 企業版

· 從 12.2 版本開始, parallel 引數擴充套件為在 expdp impdp 過程中包含後設資料,例如 parallel>1 ,所有的後設資料和資料會並行解除安裝

· 從 20C 版本開始, Data Pump 改進了並行傳輸表空間後設資料操作

9. 總結

使用者希望透過最佳化Data Pump parallel 引數來提高 expdp impdp 的效能,以達到 job 可以高效的執行。如果使用了 parallel 引數,並且有大量的資料(不是後設資料),那麼相對於原始的 expdp impdp 來講,效能會有一個很大的提升。 Data Pump 使用 parallel 引數作為 job 允許的最大並行度,即在任何給定時間內工作程式和並行執行程式的最大數量。如果使用者正在監視工作程式,有時候工作程式很忙,有時候工作程式很閒,這是正常的,意味著 Data Pump 的行為是正常的。

 

 

---- end ----

 

 

 

 


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

相關文章