GPDB43 Administrator Guide--第八章 使用gptransfer遷移資料

panpong發表於2015-09-23

第八章 使用gptransfer遷移資料

使用gptransfer工具在database之間傳送資料;gptransfer遷移工具可以傳送greenplum資料庫後設資料和資料到另一個資料庫。可以透過工具傳輸整個資料庫內容,也可以只傳輸幾個選定的表資料。傳輸資料的源資料庫與目標資料庫可以是在同一個clustersegment instance),也可以是在不同的clustersegment instance)。可以跨所有segment並行傳輸資料,透過gpfdist載入工具還能提高傳輸速度;

gptransfer要求傳輸源與目的都必須是現有的cluster,而且網路可訪問,ssh等效訪問;全資料庫傳輸包括資料庫schema、表資料、索引、檢視、角色、使用者定義函式、資源佇列等。配置檔案,如postgres.conf,pg_hba.conf等需要管理員手動傳輸。用gppkg在資料庫上安裝了擴充套件,如MADlib和程式語言擴充套件,在目標資料庫上也必須要安裝;

一、前提條件

?該gptransfer效用只能用於Greenplum資料庫,包括EMC DCA Pivotal HAWQ不支援作為源或目標。

?源和目標的Greenplum叢集必須都是4.2或更高版本。

?至少有一個Greenplum例項必須在其分佈gptransfer工具。該實用程式包括在Greenplum的資料庫版本4.2.8.1及更高和4.3.2.0及更高。如果源或目標都不包括gptransfer,你必須升級其中一個cluster到能使用gptransfer的版本。

?該gptransfer實用程式可以從源或目標資料庫的叢集上執行。

?目的clustersegment數量必須大於或等於源cluster主機的數量。在目標的segment數量可能比源中的segment數量少,則資料傳輸將以較慢的速度。

?在兩個叢集段主機必須與對方的網路連線。

?在這兩個叢集的每臺主機必須能夠與證照驗證連線到所有其他主機SSH。您可以使用gpssh_exkeys工具來在兩個叢集的主機之間交換公鑰。

二、gptransfer過程

    1.在源資料庫建立可寫外部表

    2.在目標資料庫建立可讀外部表

    3.在源cluster上建立命名管道、gpfdist程式

    4.在源資料庫執行select into 到可寫外部表,匯出資料;

    5.在目標資料庫執行select into 從可讀外部表插入資料;

    6.驗證資料,透過比較行數與MD5雜湊值;

    7.清理外部表,命名管道,gpfdist程式;

 

三、快模式與慢模式

快模式:


慢模式:


 

四、批次與子批次大小

gptransfer執行的並行程度是由兩個命令列選項來確定的:--batch-size和--sub-batch-size--batch-size選項指定每批傳輸的表數量。預設指是2,這意味著,每次傳輸兩個表。最小批次大小為1,最大值為10--sub-batch-size引數指定開始傳輸表操作時並行子過程的最大數目。預設值是25,最大為50--batch-size--sub-batch-size的乘積就是並行的數量。

如果設定為預設值,例如,gptransfer可以執行50個併發任務。每個執行緒是一個Python程式並消耗記憶體,所以設定這些值過高,會導致一個Python記憶體錯誤。出於這個原因,批次大小應適應您的環境。

 

五、準備gptransfer主機

gptransfer要求源和目標的所有主機的ssh等效;另外,gptransfer要求一個主機對映檔案,在選項--source-map-file=host_map_file中指定,格式如下:

host1_name,host1_ip_addr

host2_name,host2_ipaddr

...

六、限制

·         gptransfer只傳輸使用者的資料庫,postgrestemplate0template1等系統資料庫不能傳輸;配置檔案需要管理員手動傳輸;外掛要單獨安裝;

·         目標cluster segment至少要與源cluster segment 一樣多;如果少的話則傳輸較慢;

·         傳輸小表或者空表會出乎意料的慢。因為,固定的開銷是不能避免的,如設定外部表,並行程式建立通訊連線等;因此小表可以採用其他方法傳輸資料;

七、全模式與表模式

全模式(full mode),全資料庫傳輸包括資料庫schema、表資料、索引、檢視、角色、使用者定義函式、資源佇列等。資料庫不能在目標cluster上已經存在,如果存在則,報錯如下:[ERROR]:- gptransfer: error: --full option specified but tables exist on destination  system

表模式(table mode),傳輸資料包括表定義,索引,表資料;目標cluster上對應資料庫必須儲存;如果對應表也存在的話,則報錯:

[INFO]:-Validating transfer table set...

[CRITICAL]:- gptransfer failed. (Reason='Table database.schema.table exists in  database database .') exiting...

gptransfer選項,-t指定表,-f指表的定列表檔案,格式如:database.schema.table--skip-existing--truncate--drop選項處理存在的表;

Object

Full Mode

Table Mode

Data

Yes

Yes

Indexes

Yes

Yes

Roles

Yes

No

Functions

Yes

No

Resource Queues

Yes

No

postgres.conf

No

No

pg_hba.conf

No

No

gppkg

No

No

八、locking

-x選項開啟表鎖。排它鎖直到表資料copy和驗證完成;

九、驗證

gptransfer --validate=type。型別有兩種:一是count、二是md5

十、失敗傳輸

傳輸失敗的日誌檔案格式是-f選項要求的日誌,因此,可以透過gptransfer -f重新開始傳輸;

例子:

[WARNING]:-Some tables failed to transfer. A list of these tables

[WARNING]:-has been written to the file failed_transfer_tables_20140808_101813.txt

[WARNING]:-This file can be used with the -f option to continue

十一、最佳實踐

1.小心設定並行,不要超過主機記憶體

2.傳輸資料庫時,先使用gptransfer --full --schema-only選項,然後,再執行gptransfer --schema-only選項,同時增加--truncatedrop

3.小心選擇gpfdist和外部表的分隔符

4.如果有許多空表需要傳輸,建議考慮DDL指令碼實現,不要使用gptransfer

5.如果傳輸的表有索引,傳輸之前最好drop掉。因為,在目標資料庫上載入資料同時還要維護索引,影響傳輸速度;

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

相關文章