天天看點

Greenplum應用最佳實踐

Greenplum最佳實踐Note

-------------------------------------------------------

最佳實踐概述

GPDB是一個基于大規模并行處理(MPP)和shared-nothing架構的分析型資料庫。這種資料庫的資料模式與高度規範化的事務性SMP的資料庫顯著不同,支援具有大事實表和小次元表的Star或者雪花模式。

1.Greenplum Best Practice

*資料模型*

* 跨表關聯(JOIN)時字段使用相同的資料類型。

* 堆存儲和追加優化存儲(Append-Optimized,下稱 AO)

* 若表和分區表需要進行疊代式的批處理或者頻繁執行單個UPDATE、DELETE或INSERT操作,

* 若表和分區表需要并發執行 UPDATE、DELETE 或 INSERT 操作,使用堆存儲。

* 若表和分區表在資料初始加載後更新不頻繁,且僅以批處理方式插入資料,則使用 AO 存儲。

* 不要對 AO 表執行單個 INSERT、UPDATE 或 DELETE 操作。

* 不要對 AO 表執行并發批量 UPDATE 或 DELETE 操作,但可以并發執行批量 INSERT 操作。

*行列存儲*

* 若資料需要經常更新或者插入,則使用行存儲。

* 若需要同時通路一個表的很多字段,則使用行存儲。

* 對于通用或者混合型業務,建議使用行存儲。

* 若查詢通路的字段數目較少,或者僅在少量字段上進行聚合操作,則使用列存儲。 

* 若僅常常修改表的某一字段而不修改其他字段,則使用列存儲。

*資料壓縮*

* 對于大 AO 表和分區表使用壓縮,以提高系統 I/O。

* 在字段級别配置壓縮。

* 考慮壓縮比和壓縮性能之間的平衡。

*資料分布Distribute*

為所有表定義分布政策:要麼定義分布鍵,要麼使用随機分布。不要使用預設分布方式。

* 優先選擇可均勻分布資料的單個字段做分布鍵。

* 不要選擇經常用于 WHERE 子句的字段做分布鍵。

* 不要使用日期或時間字段做分布鍵

* 分布鍵Distribute和分區鍵Partition不要使用同一字段。

* 對經常執行 JOIN 操作的大表,優先考慮使用關聯字段做分布鍵,盡量做到本地關聯,以提高性能。

* 資料初始加載後或者每次增量加載後,檢查資料分布是否均勻。

* 盡可能避免資料傾斜。

Comments:檢視資料分布:SELECT gp_segment_id,COUNT(1) FROM tablename GROUP BY gp_segment_id;

*記憶體管理*

* 設定 vm.overcommit_memory 為 2

* 不要為作業系統的頁設定過大的值

* 使用 gp_vmem_protect_limit 設定單個節點資料庫(Segment Database)可以為所有查詢分 配的最大記憶體量。

- 不要設定過高的 gp_vmem_protect_limit 值,也不要大于系統的實體記憶體。

- gp_vmem_protect_limit 的建議值計算公式為: (SWAP + (RAM * vm.overcommit_ratio)) * 0.9 / number_Segments_per_server

* 使用 statement_mem 控制節點資料庫為單個查詢配置設定的記憶體量。(注意該參數生效的前提是設定gpresqueue_memory_policy為auto,預設是eager_free)

* 使用資源隊列設定隊列允許的目前最大查詢數(ACTIVE_STATEMENTS)和允許使用的記憶體大小(MEMORY_LIMIT)。

- 不要使用預設的資源隊列,為所有使用者都配置設定資源隊列。 根據負載和時間段,設定和隊列實際需求相比對的優先級(PRIORITY)。 保證資源隊列的記憶體配額不超過 gp_vmem_protect_limit。

- 動态更新資源隊列配置以适應日常工作需要。

*資料分區*

* 隻為大表設定分區,不要為小表設定分區。

* 僅在根據查詢條件可以實作分區裁剪時使用分區表。

* 建議優先使用範圍(Range)分區,否則使用清單(List)分區。

* 根據查詢特點合理設定分區。

* 不要使用相同的字段即做分區鍵又做分布鍵。

* 不要使用預設分區。

* 避免使用多級分區;盡量建立少量的分區,每個分區的資料更多些。

* 通過查詢計劃的 EXPLAIN 結果來驗證查詢對分區表執行的是選擇性掃描 (分區裁剪)。

* 對于列存儲的表,不要建立過多的分區,否則會造成實體檔案過多:Physical files = Segments * Columns * Partitions。

*索引*

一般來說 GPDB 中索引不是必需的。

* 對于高基數(HIGH Cardinality-唯一值多)的列存儲表,如果需要周遊且查詢選擇性較高,則建立單列索引。 

* 頻繁更新的列不要建立索引。

* 在加載大量資料之前删除索引,加載結束後再重新建立索引。

* 優先使用 B 樹索引。

* 不要為需要頻繁更新的字段建立位圖索引。

* 不要為唯一性字段,基數非常高或者非常低的字段建立位圖索引。

* 不要為事務性負載建立位圖索引。

* 一般來說不要索引分區表。如果需要建立索引,則選擇與分區鍵不同的字段。

*資源隊列*

* 使用資源隊列管理叢集的負載。

* 為所有角色定義适當的資源隊列。

* 使用 ACTIVE_STATEMENTS 參數限制隊列成員可以并發運作的查詢總數。 

* 使用 MEMORY_LIMIT 參數限制隊列中查詢可以使用的記憶體總量。

* 不要設定所有隊列為 MEDIUM,這樣起不到管理負載的作用。

* 根據負載和時間段動态調整資源隊列。

_JDBC Driver_

使用Greenplum DataDirect JDBC Driver(相比postgresql jdbc driver,性能差。。。需研究)

2.BestPractice詳細内容

**2.0.系統監控**

監控工具 nmon_x86_64_centos7

**2.1.自建資源隊列**

建議通過greenplum command center的Administration->Manage resource queues選項操作。

自己建立資源隊列,系統預設的資源隊列pg_default,對記憶體參數沒有做出限制,會有記憶體溢出的風險

Comment:必須設定資源隊列,否則大資料量查詢很容易産生記憶體溢出異常

資源隊列具體參數設定:

ACTIVE_STATEMENTS:此參數限制隊列中同是執行的query數量,當query數量超過此值是則處于等待狀态。pg_default預設值是20。

MEMORY_LIMIT:此參數限制起源隊中所有活動query(參見ACTIVE_STATEMENTS參數)能使用的最大記憶體,不能超過實體記憶體,計算方法為 

實體momery/機器的節點個數 x 0.9;

* 建立資源隊列

CREATE RESOURCE QUEUE ir_rq WITH(

ACTIVE_STATEMENTS=20,

MEMORY_LIMIT=1800M)

* 建立使用者

CREATE ROLE username with login ENCRYPTED PASSWORD RESOURCE QUEUE ir_rq;

*2.2.統計優化Vacuum*

greenplum4後版本支援壓縮表的插入删除和更新操作

GP删除資料是辨別删除,磁盤上的資料并沒有真正删除,是以該空間不可重用

官方建議Vacuum的執行周期是每晚.該政策需測試

* vacuum隻是簡單的回收空間且令其可以再次使用,沒有請求排它鎖,仍舊可以對表讀寫

* vacuum full執行更廣泛的處理,包括跨塊移動行,以便把表壓縮至使用最少的磁盤塊數目存儲。相對vacuum要慢,而且會請求排它鎖。

* 定期執行:在日常維護中,需要對資料字典定期執行vacuum,可以每天在資料庫空閑的時候進行。然後每隔一段較長時間(兩三個月)對系統表執行一次vacuum full,這個操作需要停機,比較耗時,大表可能耗時幾個小時。

* reindex:執行vacuum之後,最好對表上的索引進行重建

*2.2.1.Heap表*

Vacuum指令會讓标記删除資料占有空間變得可以被使用。參數具體如下

* FULL:回收空間并且對磁盤上的資料進行整理,類似磁盤碎片整理,耗時較長,并且鎖表。是以不建議執行該指令

* ANALYZE:更新統計資訊,查詢分析器生成更新的EXPLAIN Plan.

* table:預設的是目前資料庫下的所有表

* column:預設的目前表的所有列

*2.2.2.Append-Optimised追加優化*

greenplum 4.x 以後的appendonly表可以支援更新和删除操作,但是限制不能更新分布鍵distributeKey所在的列

Vacuum首先整理優化索引,接下來順序的在每個segment節點上執行優化,最後整理優化輔助表并更新統計資訊。在每個segment節點上操作如下:

1. 複制目前segment所有可見的資料行到一個新的segment,之後删除目前segment上的資料并且讓新segment上的資料變得可用

2. Vacuum不帶full參數,增删改查可以正常操作

3. Vacuum full指令,鎖表

4. gp_appendonly_compaction_threshold,控制Vacuum(without full)運作時是否進行表優化

壓縮系統設定

當一個查詢的結果過大溢出到硬碟時  采用gp_workfile_compress_algorithm 指定的參數壓縮,預設值none,可選值zlib,設定成zlib後,在密集型查詢系統中可提升10%-20%的效率

設定方法gpconfig -c gp_workfile_compress_algorithm -v zlib

**2.3.ANALYZE**

* 指令:analyze [talbe [(column,..)]]

* 收集表内容的統計資訊,以優化執行計劃。如建立索引後,執行此指令,對于随即查詢将會利用索引。

* 自動統計資訊收集

* 在postgresql.conf中有控制自動收集的參數gp_autostats_mode設定,gp_autostats_mode三個值:none、no_change、on_no_stats(預設) 

* none:禁止收集統計資訊

* on change:當一條DML執行後影響的行數超過gp_autostats_on_change_threshold參數指定的值時,會執行完這條DML後再自動執行一個analyze 的操作來收集表的統計資訊。

* no_no_stats:當使用create talbe as select 、insert 、copy時,如果在目标表中沒有收集過統計資訊,那麼會自動執行analyze 來收集這張表的資訊。gp預設使用on_no_stats,對資料庫的消耗比較小,但是對于不斷變更的表,資料庫在第一次收集統計資訊之後就不會再收集了。需要人為定時執行analyze.

* 如果有大量的運作時間在1分鐘以下的SQL,你會發現大量的時間消耗在收集統計資訊上。為了降低這一部分的消耗,可以指定對某些列不收集統計資訊,如下所示:

1. create table test(id int, name text,note text);

上面是已知道表列note不需出現在join列上,也不會出現在where語句的過濾條件下,因為可以把這個列設定為不收集統計資訊:

2. alter table test alter note SET STATISTICS 0;

**2.4.兩種聚合方式**

* HashAggregate 根據group by字段後面的值算出hash值,并根據前面使用的聚合函數在記憶體中維護對應的清單,幾個聚合函數就有幾個數組。相同資料量的情況下,聚合字段的重複度越小,使用的記憶體越大。

* GroupAggregate 先将表中的資料按照group by的字段排序,在對排好序的資料進行全掃描,并進行聚合函數計算。消耗記憶體基本是恒定的。

* 選擇在SQL中有大量的聚合函數,group by的字段重複值比較少的時候,應該用groupaggregate

**2.5.JOIN關聯方式**

分為三類:hash join、nestloop join、merge join,在保證sql執行正确的前提下,規劃器優先采用hash join。

* hash join: 先對其中一張關聯的表計算hash值,在記憶體中用一個散清單儲存,然後對另外一張表進行全表掃描,之後将每一行與這個散清單進行關聯。

* nestedloop:關聯的兩張表中的資料量比較小的表進行廣播,如笛卡爾積:select * fromtest1,test2

* merge join:将兩張表按照關聯鍵進行排序,然後按照歸并排序的方式将資料進行關聯,效率比hash join差。full outer join隻能采用merge join來實作。

* 關聯的廣播與重分布解析P133,一般規劃器會自動選擇最優執行計劃。

* 有時會導緻重分布和廣播,比較耗時的操作

**2.6.Redistribute重分布**

一些sql查詢中,需要資料在各節點重新分布,受制于網絡傳輸、磁盤I/O,重分布的速度比較慢。

* 關聯鍵強制類型轉換 

一般,表按照指定的分布鍵作hash分部。如果兩個表按照id:intege、id:numericr分布,關聯時,需要有一個表id作強制類型轉化,因為不同類型的hash值不一樣,因而導緻資料重分布。

* 關聯鍵與分部鍵不一緻

* group by、開窗函數、grouping sets會引發重分布

**2.7.資料Load政策**

_gpfdist/gpload_

- 使用 gpfdist 進行資料的加載和導出。

- 随着段資料庫個數的增加,并行性增加。

- 盡量将資料均勻地分布到多個 ETL 節點上。 将非常大的資料檔案切分成相同大小的塊,并放在盡量多的檔案系統上。

- 一個檔案系統運作兩個 gpfdist 執行個體。

- 在盡可能多的網絡接口上運作 gpfdsit。

- 使用 gp_external_max_segs 控制通路每個 gpfdist 伺服器的段資料庫的個數.建議gp_external_max_segs的值和gpfdist程序個數為偶數。

- 資料加載前删除索引;加載完後重建索引。

- 資料加載完成後運作 ANALYZE 操作。

- 資料加載過程中,設定 gp_autostats_mode 為 NONE,取消統計資訊的自動收集。 若資料加載失敗,使用 VACUUM 回收空間。

_COPY_

使用COPY指令前,删除Index和外鍵限制,事後運作VACUUM ANALYZE

**2.8.Greenplum Index**

    -[sql_commands_create_index](http://gpdb.docs.pivotal.io/4320/ref_guide/sql_commands/CREATE_INDEX.html)

- GP不建議使用索引

- GP主要做快速有序地掃描(基于分區)

- 如果建立全局索引,資料分布機制和分區機制,會完全打亂索引。如果基于單個分區去建立索引,這個有點像阿裡的xxx,應該有一定效果吧

GP中索引的起作用的場景:

傳回1條或者很小的集合時

當可以使用index來替代全表掃描的查詢(append-optimized tables)

GP隻支援在使用者建立的表上建立索引,不支援GP依據分區建立的葉表上建立索引。建立的索引會被複制到各個葉表上。

Greenplum supports B-Tree, Bitmap, and GiST indexes.

    - B-Tree indexes can be unique or not.

    - Bitmap indexes are good useful when there are 100 to 100,000 distinct values (Bitmap indexes are best suited on columns for querying than updating).

    - GiST (Generalized Search Tree) indexes are used to support PostGIS.

3.Data Modeling & Design-資料模型與設計

Greenplum資料模型設計:

- 确定和描述在資料倉庫中使用的資料模型與哪些資料可存儲在GP中.Identify and describe the data models used in data warehousing and describe how data is stored in Greenplum.

- 分布存儲資料在GP中,使用分布鍵(distribution key), 分區表(partitioning)與限制(constraints).Distribute and store data in Greenplum using a distribution key,partitioning,and constraints.

**3.1.Data Models-資料模型**

* Logical data model - Cube

* Enhanced logical data model - AggregateResult/View

* The physical data model - DBTable

Greenplum應用最佳實踐

Entity|Attribute|Relationship|Constraint

*A.Logical Data Models-邏輯Cube模型*

* Star Schema 星型模型

* Snowflake Schema 雪花模型

* Third Normal Form(3NF) 第三範式

Dimensional Approach in DW:Star and snowflake schemas are the most common in DW implementations.

Greenplum應用最佳實踐

*B.Physical Data Models-實體表模型*

* Select the best distribution key used for distributing data 

* Check for data skew(資料傾斜)

* Identfy the benefits of partitioning a table and when to partition a table

* Determine partitioning candidates

* Select appropriate data type for your data

* Define constraints on tables and columns 

Greenplum應用最佳實踐

**3.2.Table Compression**

Rules of Compression:

- Use compression on pretty large AO (append-optimized) and partitioned tables, to improve disk I/O across the system. It won’t help very much for smaller tables.

- The best practice is to set the column compression settings at the level where the data resides.

- New partitions added to a partitioned table do not automatically inherit compression defined at the table level; you must specifically define compression when you add new partitions.

- Data compression should never be used for data that is stored on a compressed file system.

**3.3.Data Distribution**

-Using the same distribution key for commonly joined tables

-Avoid redistribute motion for large tables

-Avoid broadcast motion for large tables

- 充分利用并行計算MPP

- 避免資料傾斜

- 為所有表要麼明确地指明其分布字段,要麼使用随機分布(DISTRIBUTED RANDOMLY)。不要使用預設方式。

- 分布字段的資料要麼是唯一值要麼基數很大。以避免資料傾斜

- 不要使用在WHERE會用到字段作為分布鍵

- 不要使用date/timestamp類型字段作為分布鍵

- 如果單個字段不能實作資料均勻分布,則考慮使用兩個字段做分布鍵。作為分布鍵的字段最

好不要超過兩個。

- 由于GP的随機分布不是round-robin,是以無法保證每個segment資料量相當。

- join關聯查詢、開窗函數等使用其關聯字段作為分布distribute鍵。這樣能讓表關聯JOIN資料都分布在同一segment,以減少redistribution motion.

**3.4.Check for Data Skew-檢查資料傾斜**

- 資料傾斜是影響性能的主要原因,是以驗證資料分布合理與否非常重要。使用gp_tookit可檢查傾斜

- 檢視某表是否分布不均: select gp_segment_id,count(*) from fact_table group by gp_segment_id

- 在segment一級,可以通過select gp_segment_id,count(*) from fact_table group by gp_segment_id的方式檢查每張表的資料是否均勻存放

- 在系統級,可以直接用df -h 或du -h檢查磁盤或者目錄資料是否均勻

- 檢視資料庫中資料傾斜的表 

首先定義資料傾斜率為:最大子節點資料量/平均節點資料量。為避免整張表的資料量為空,同時對結果的影響很小,在平均節點資料量基礎上加上一個很小的值,SQL如下:

SELECT tabname, max(SIZE)/(avg(SIZE)+0.001) AS max_div_avg, sum(SIZE) total_size FROM (
        SELECT gp_segment_id, oid::regclass tabname, pg_relation_size(oid) SIZE FROM gp_dist_random('pg_class') 
        WHERE relkind='r' AND relstorage IN ('a','h')
) t GROUP BY tabname ORDER BY max_div_avg DESC;      

gp_toolkit administrative schema offers two views:

- gp_toolkit.gp_skew_coefficients

- gp_toolkit.gp_skew_idle_fractions

**3.5.Partitions**

好的分區表政策可以提高系統Scan資料的性能。

- 隻為大表設定分區,不要為小表設定分區。一般超過1億以上的資料才值得分區。

- 每個Partition都是在每個segment中的一個獨立實體表

- 查詢所有分區要比查詢同樣資料在非分區表更慢

- 隻有當partition elimination能實作時才需要分區

- 盡量使用range partition(date類型或numeric類型)替代list partition

- 盡量讓預設分區為空。因為預設分區總是會被掃描,更重要的是很多情況下會導緻溢出而造成性能不佳。

- 禁止分布鍵與分區字段相同

- Partitioning Table

Greenplum應用最佳實踐

- Table Partitioning BP

Greenplum應用最佳實踐

- Distribution and Partition

Greenplum應用最佳實踐

4.GP系統參數

配置檔案 – postgresql.conf中,列出一些最常用的參數。

- shared_buffers:剛開始可以設定一個較小的值,比如總記憶體的15%,然後逐漸增加,過程中監控性能提升和swap的情況。

- effective_cache_size : 這個參數告訴PostgreSQL的優化器有多少記憶體可以被用來緩存資料,以及幫助決定是否應該使用索引。這個數值越大,優化器使用索引的可能性也越大。是以這個數值應該設定成shared_buffers加上可用作業系統緩存兩者的總量。通常這個數值會超過系統記憶體總量的50%。

- work_mem: 當PostgreSQL對大表進行排序時,資料庫會按照此參數指定大小進行分片排序,将中間結果存放在臨時檔案中,這些中間結果的臨時檔案最終會再次合并排序,是以增加此參數可以減少臨時檔案個數進而提升排序效率。當然如果設定過大,會導緻swap的發生,是以設定此參數時仍需謹慎,剛開始可設定為總記憶體的5%。

- temp_buffers: 即臨時緩沖區,擁有資料庫通路臨時資料,GP中預設值為1M,在通路比較到大的臨時表時,對性能提升有很大幫助。

- gp_fts_probe_threadcount: 設定ftsprobe線程數,此參數建議大于等于每台伺服器segments的數目。

- gp_hashjoin_tuples_per_bucket: 此參數越小,hash_tables越大,可提升join性能。

- gp_interconnect_setup_timeout: 此參數在負載較大的叢集中,應該設定較大的值。

- gp_vmem_protect_limit: 控制了每個段資料庫為所有運作的查詢配置設定的記憶體總量。如果查詢需要的記憶體超過此值,則會失敗。使用下面公式确定合适的值:

(swap + (RAM * vm.overcommit_ratio)) * 0.9 / number_of_Segments_per_server

例如,具有下面配置的段伺服器:

8GB 交換空間

128GB 記憶體

vm.overcommit_ratio = 50

8 個段資料庫

(8 + (128 * .5)) * 0.9 / 8 = 8 GB, 則設定gp_vmem_protect_limit為 8GB:

[VMemCalcPage](

https://greenplum.org/calc/

)

- gp_statement_mem: 伺服器配置參數 gp_statement_mem 控制段資料庫上單個查詢可以使用的記憶體總量。如果語句需要更多記憶體,則會溢出資料到磁盤。用下面公式确定合适的值:

(gp_vmem_protect_limit * .9) / max_expected_concurrent_queries

例如,如果并發度為40, gp_vmeme_protect_limit為8GB,則 gp_statement_mem 為:

(8192MB * .9) / 40 = 184MB,每個查詢最多可以使用 184MB 記憶體,之後将溢出到磁盤。

- gp_workfile_limit_files_per_query:

如果為SQL查詢配置設定的記憶體不足,Greenplum資料庫會建立溢出檔案(也叫工作檔案)。在預設情況下,一個SQL查詢最多可以建立 100000 個溢出檔案,這足以滿足大多數查詢。

該參數決定了一個查詢最多可以建立多少個溢出檔案。0 意味着沒有限制。限制溢出檔案資料可以防止失控查詢破壞整個系統。 

如果配置設定記憶體不足或者出現資料傾斜,則一個SQL查詢可能産生大量溢出檔案。如果超過溢出檔案上限,Greenplum資料庫報告如下錯誤:

ERROR: number of workfiles per query limit exceeded

在嘗試增大gp_workfile_limit_files_per_query前,先嘗試通過修改 SQL、資料分布政策或者記憶體配置以降低溢出檔案個數。

- max_connections: 最大連接配接數,Segment建議設定成Master的5-10倍。

- gpconfig -c optimizer -v off(根據查詢SQL特征決定查詢優化器的選擇)

set optimizer = on;(應用GPORCA)

GPORCA比較适合 1.分區表 2.子查詢 3.Join查詢

- [Configure Params](

https://gpdb.docs.pivotal.io/570/ref_guide/config_params/guc-list.html

5.GP Performance Check

- gpcheckperf -f hostlist -d /data1 -d /data2 -r ds

- gpcheckperf -f hostfile_gpchecknet_ic1 -r N -d /tmp

- [gpcheckperf](

http://gpdb.docs.pivotal.io/4320/utility_guide/admin_utilities/gpcheckperf.html

6.GP Functions

[GP Functions](

http://gpdb.docs.pivotal.io/4380/admin_guide/query/topics/functions-operators.html

GPText:Greenplum全文檢索引擎

7.GP System Recovery

**Greenplum系統恢複**

要求:PrimarySegment超過一半節點處于Down狀态下,就需要啟動系統恢複機制

先切換到gpadmin賬号下, su - gpadmin

Greenplum應用最佳實踐

**7.1.gpstate**

Show detailed status information of a Greenplum Database system:

- gpstate -s

Do a quick check for down segments in the master host system catalog:

- gpstate -Q

Show information about mirror segment instances:

- gpstate -m

**7.2.gprecoverseg**

Rebalance your Greenplum Database system after a recovery by resetting all segments to their preferred role. First check that all segments are up and synchronized.

$ gpstate -m
$ gprecoverseg 
$ gprecoverseg -r      

**7.3.Greenplum備份管理**

**7.3.1.gpcrondump(gp_dump)**

Back up a database:
gp_dump gpdb
Back up a database, and create dump files in a centralized location on all hosts:
gp_dump --gp-d=/home/gpadmin/backups gpdb      

**7.3.2.gpdbrestore(gp_restore)**

Restore a Greenplum database using backup files created by gp_dump:
gp_restore --gp-k=2005103112453 -d gpdb      

**7.4.Greenplum Segment更新**

**7.4.1.Segment擴充**

[參考資料](

https://yq.aliyun.com/articles/177

**7.4.2.Segment異常恢複**

[gprecoversegInfo](

http://gpdb.docs.pivotal.io/4320/utility_guide/admin_utilities/gprecoverseg.html

_A.磁盤異常,可替換磁盤(不添加Host)_

執行gprecoverseg -F (full recovery)
執行gprecoverseg -S  (擷取預設配置檔案)
執行gprecoverseg -s      

Note: The -s and -S options are only used when you recover to existing hosts in the cluster. You cannot use these options

when you recover to a new host. To recover to a new host,use the -i and -o options.

_B.硬體異常,Host不可用,使用新Host_

When a segment host is not recoverable

[GP SegmentHost恢複方案](

https://yq.aliyun.com/articles/79165

_C.重點步驟:_

備份GP伺服器搭建

重建立立叢集内部的ssh通信認證(替換之前主機ssh在know_hosts,添加新主機的ssh-key)

**7.4.3.删除Segment**

- [RemoveSegment](

http://blog.csdn.net/u011478909/article/details/52692280

x.Ref

- [Greenplum offical](

http://greenplum.org/

- [Greenplum最佳實踐](

https://wenku.baidu.com/view/2f36c23d30126edb6f1aff00bed5b9f3f90f721c.html

- [Tuning Greenplum](

https://www.linkedin.com/pulse/tuning-greenplum-database-sandeep-katta-

- [Data Modeling for Greenplum](

http://download.csdn.net/download/darkcatc/8474339