国产精品久久久久久2021,日韩精品无码av中文无码版,亚洲精品久久久午夜麻豆,无码成人精品日本动漫纯h

010-68421378
當(dāng)前您所在的位置:首頁(yè)>新聞中心>新品發(fā)布

Greenplum database:最佳實(shí)踐概要!

發(fā)布時(shí)間:2019/07/12 瀏覽量:3748
Greenplum數(shù)據(jù)庫(kù)是一種shared nothing的分析型MPP數(shù)據(jù)庫(kù)。

最佳實(shí)踐概要

?

數(shù)據(jù)模型

Greenplum數(shù)據(jù)庫(kù)是一種shared nothing的分析型MPP數(shù)據(jù)庫(kù)。這種模型與高度規(guī)范化的/事務(wù)型的SMP數(shù)據(jù)庫(kù)有顯著區(qū)別。Greenplum數(shù)據(jù)庫(kù)使用非規(guī)范化的模式設(shè)計(jì)會(huì)工作得最好,非規(guī)范化的模式適合于MPP分析型處理,例如帶有大型事實(shí)表和較小維度表的星形模式或者雪花模式。

對(duì)表中用于連接的列使用相同的數(shù)據(jù)類型。

 

堆存儲(chǔ) vs. 追加優(yōu)化存儲(chǔ)

對(duì)將會(huì)接收迭代批量或者單一UPDATE、DELETE以及INSERT操作的表和分區(qū)使用堆存儲(chǔ)。

對(duì)將會(huì)接收并發(fā)UPDATE、DELETE以及INSERT操作的表和分區(qū)使用堆存儲(chǔ)。

對(duì)于在初始裝載后很少更新并且只會(huì)在大型批處理操作中進(jìn)行后續(xù)插入的表和分區(qū),使用追加優(yōu)化存儲(chǔ)。

絕不在追加優(yōu)化表上執(zhí)行單個(gè)INSERT、UPDATE或者DELETE操作。

絕不在追加優(yōu)化表上執(zhí)行并發(fā)的批量UPDATE或DELETE操作。可以執(zhí)行并發(fā)的批量INSERT操作。

 

行存 vs. 列存

如果負(fù)載中有要求更新并且頻繁執(zhí)行插入的迭代事務(wù),則對(duì)這種負(fù)載使用行存。

在對(duì)寬表選擇時(shí)使用行存。

為一般目的或混合負(fù)載使用行存。

選擇面很窄(很少的列)和在少量列上計(jì)算數(shù)據(jù)聚集時(shí)使用列存。

如果表中有單個(gè)列定期被更新而不修改行中的其他列,則對(duì)這種表使用列存。

 

壓縮

在大型追加優(yōu)化和分區(qū)表上使用壓縮以改進(jìn)系統(tǒng)范圍的I/O。

在數(shù)據(jù)位于的級(jí)別上設(shè)置列壓縮設(shè)置。

在較高的壓縮級(jí)別和壓縮解壓數(shù)據(jù)所需的時(shí)間和CPU周期之間做出平衡。

 

分布

為所有的表顯式定義一個(gè)列分布或者隨機(jī)分布。不要使用默認(rèn)值。

使用將在所有Segment間均勻分布的單列。

不要在查詢的WHERE子句中用到的列上進(jìn)行分布。

不要在日期或時(shí)間戳上分布。

不要在同一列上分布并且分區(qū)表。

在常被連接起來的大型表的相同列上進(jìn)行分布以顯著地改進(jìn)本地連接。

在初始裝載數(shù)據(jù)以及增量裝載數(shù)據(jù)之后驗(yàn)證數(shù)據(jù)被均勻分布。

根本上確保沒有數(shù)據(jù)傾斜!

 

內(nèi)存管理

把vm.overcommit_memory設(shè)置為2。

不要配置OS使用大頁(yè)。

使用gp_vmem_protect_limit設(shè)置實(shí)例可以為每個(gè)Segment數(shù)據(jù)庫(kù)中執(zhí)行的所有工作分配的最大內(nèi)存。

通過下面的計(jì)算為gp_vmem_protect_limit設(shè)置值:

gp_vmem – Greenplum數(shù)據(jù)庫(kù)可用的總內(nèi)存

 

 

其中 SWAP是該主機(jī)的交換空間(以GB為單位),RAM是該主機(jī)的RAM(以GB為單位)

max_acting_primary_segments – 當(dāng)鏡像Segment由于主機(jī)或者Segment失效而被激活時(shí),能在一臺(tái)主機(jī)上運(yùn)行的最主Segment的最大數(shù)量

gp_vmem_protect_limit

 

 

轉(zhuǎn)換成MB來設(shè)置配置參數(shù)的值。

在有大量工作文件被生成的場(chǎng)景下用下面的公式計(jì)算將工作文件考慮在內(nèi)的gp_vmem因子:

 

 

絕不將gp_vmem_protect_limit設(shè)置得過高或者比系統(tǒng)上的物理RAM大。

使用計(jì)算出的gp_vmem值來計(jì)算操作系統(tǒng)參數(shù)vm.overcommit_ratio的設(shè)置:

 

 

使用statement_mem來分配每個(gè)Segment數(shù)據(jù)庫(kù)中用于一個(gè)查詢的內(nèi)存。

使用資源隊(duì)列設(shè)置活動(dòng)查詢的數(shù)目(ACTIVE_STATEMENTS)以及隊(duì)列中查詢所能利用的內(nèi)存量(MEMORY_LIMIT)。

把所有的用戶都與一個(gè)資源隊(duì)列關(guān)聯(lián)。不要使用默認(rèn)的隊(duì)列。

設(shè)置PRIORITY以匹配用于負(fù)載以及實(shí)際情況的隊(duì)列的實(shí)際需要。

確保資源隊(duì)列的內(nèi)存分配不會(huì)超過gp_vmem_protect_limit的設(shè)置。

動(dòng)態(tài)更新資源隊(duì)列設(shè)置以匹配日常操作流。

 

分區(qū)

只對(duì)大型表分區(qū)。不要分區(qū)小表。

只有能基于查詢條件實(shí)現(xiàn)分區(qū)消除(分區(qū)剪枝)時(shí)才使用分區(qū)。

選擇范圍分區(qū)而舍棄列表分區(qū)。

基于查詢謂詞對(duì)表分區(qū)。

不要在同一列上對(duì)表進(jìn)行分布和分區(qū)。

不要使用默認(rèn)分區(qū)。

不要使用多級(jí)分區(qū),創(chuàng)建較少的分區(qū)讓每個(gè)分區(qū)中有更多數(shù)據(jù)。

通過檢查查詢的EXPLAIN計(jì)劃驗(yàn)證查詢有選擇地掃描分區(qū)表(分區(qū)被消除)。

不要用列存儲(chǔ)創(chuàng)建太多分區(qū),因?yàn)槊總€(gè)Segment上的物理文件總數(shù):物理文件數(shù) = Segment數(shù) x 列數(shù) x 分區(qū)數(shù)

 

索引

通常在Greenplum數(shù)據(jù)庫(kù)中無需索引。

對(duì)高基數(shù)的表在列式表的單列上創(chuàng)建索引用于鉆透目的要求查詢具有較高的選擇度。

不要索引被頻繁更新的列。

總是在裝載數(shù)據(jù)到表之前刪除索引。在裝載后,重新為該表創(chuàng)建索引。

創(chuàng)建具有選擇性的B-樹索引。

不要在被更新的列上創(chuàng)建位圖索引。

不要為唯一列、基數(shù)非常高或者非常低的數(shù)據(jù)使用位圖索引。

不要為事務(wù)性負(fù)載使用位圖索引。

通常不要索引分區(qū)表。如果需要索引,索引列必須與分區(qū)列不同。

 

資源隊(duì)列

使用資源隊(duì)列來管理集群上的負(fù)載。

將所有的角色都與一個(gè)用戶定義的資源隊(duì)列關(guān)聯(lián)。

使用ACTIVE_STATEMENTS參數(shù)限制特定隊(duì)列的成員能并發(fā)運(yùn)行的活動(dòng)查詢數(shù)量。

使用MEMORY_LIMIT參數(shù)控制通過隊(duì)列運(yùn)行的查詢所能利用的總內(nèi)存量。

不要把所有隊(duì)列都設(shè)置為MEDIUM,因?yàn)檫@實(shí)際上沒有對(duì)負(fù)載進(jìn)行管理。

動(dòng)態(tài)修改資源隊(duì)列以匹配負(fù)載以及現(xiàn)狀。

 

監(jiān)控和維護(hù)

實(shí)現(xiàn)Greenplum數(shù)據(jù)庫(kù)管理員指南中的"推薦的監(jiān)控和維護(hù)任務(wù)"。

安裝時(shí)運(yùn)行g(shù)pcheckperf并且在之后定期運(yùn)行該工具,保存其輸出用來比較系統(tǒng)性能隨時(shí)間的變化。

使用手頭的所有工具來理解系統(tǒng)在不同負(fù)載下的表現(xiàn)。

檢查任何異常事件以判斷成因。

通過定期運(yùn)行解釋計(jì)劃監(jiān)控查詢活動(dòng)以確保查詢被以最優(yōu)的方式運(yùn)行。

檢查計(jì)劃以判斷索引是否被使用以及分區(qū)消除是否按照預(yù)期發(fā)生。

了解系統(tǒng)日志文件的位置和內(nèi)容并且定期監(jiān)控它們,而不是只在問題出現(xiàn)時(shí)才去檢查日志。

 

ANALYZE

不要在整個(gè)數(shù)據(jù)庫(kù)上運(yùn)行ANALYZE。需要時(shí),有選擇地在表級(jí)別上運(yùn)行ANALYZE。

在裝載后總是運(yùn)行ANALYZE。

在顯著改變底層數(shù)據(jù)的INSERT、UPDATE以及DELETE操作之后總是運(yùn)行ANALYZE。

在CREATE INDEX操作之后總是運(yùn)行ANALYZE。

如果在非常大的表上運(yùn)行ANALYZE需要太長(zhǎng)時(shí)間,可以只在用于連接條件、WHERE子句、SORT子句、GROUP BY子句或者HAVING子句的列上運(yùn)行ANALYZE。

 

清掃

在大型UPDATE和DELETE操作后運(yùn)行VACUUM。

不要運(yùn)行VACUUM FULL。而是運(yùn)行一個(gè)CREATE TABLE...AS操作,然后重命名并且刪掉原始表。

頻繁地在系統(tǒng)目錄上運(yùn)行VACUUM以避免目錄膨脹以及在目錄上運(yùn)行VACUUM FULL的需要。

絕不要?dú)⒌裟夸洷砩系腣ACUUM。

不要運(yùn)行VACUUM ANALYZE。

 

裝載

使用gpfdist在Greenplum數(shù)據(jù)庫(kù)中裝載或者卸載數(shù)據(jù)。

隨著Segment數(shù)目增加最大化并行性。

在盡可能多的ETL節(jié)點(diǎn)上均勻散布數(shù)據(jù)。

把非常大型的數(shù)據(jù)文件分割成相等的部分,并且把數(shù)據(jù)散布在盡可能多的文件系統(tǒng)上。

每個(gè)文件系統(tǒng)運(yùn)行兩個(gè)gpfdist實(shí)例。

在盡可能多的接口上運(yùn)行g(shù)pfdist。

使用gp_external_max_segs以控制每個(gè)gpfdist服務(wù)的Segment數(shù)量。

總是保持gp_external_max_segs和gpfdist進(jìn)程的數(shù)量為偶因子。

在裝載到現(xiàn)有表之前總是刪除索引并且在裝載之后重建索引。

總是在對(duì)表裝載之后運(yùn)行ANALYZE。

在裝載期間通過設(shè)置gp_autostats_mode為NONE禁用自動(dòng)統(tǒng)計(jì)信息收集。

在裝載錯(cuò)誤之后運(yùn)行VACUUM以重新獲得空間。

 

gptransfer

為了最快的傳輸率,使用gptransfer傳輸數(shù)據(jù)到尺寸相同或者更大的目標(biāo)數(shù)據(jù)庫(kù)。

避免使用--full或--schema-only選項(xiàng)。而是使用不同的方法將模式復(fù)制到目標(biāo)數(shù)據(jù)庫(kù)中,然后傳輸表數(shù)據(jù)。

在傳輸表之前刪除索引并且在傳輸完成后重建它們。

使用SQL的COPY命令傳輸較小的表到目標(biāo)數(shù)據(jù)庫(kù)。

使用gptransfer批量傳輸較大的表。

在執(zhí)行生產(chǎn)遷移之前,先測(cè)試運(yùn)行g(shù)ptransfer。用--batch-size和--sub-batch-size選項(xiàng)進(jìn)行實(shí)驗(yàn)以得到最大并行性。為迭代運(yùn)行g(shù)ptransfer確定合適的表批次。

只使用完全限定的表名稱。表名中的點(diǎn)號(hào)(.)、空格、引號(hào)(')和雙引號(hào)(")都可能造成問題。

如果使用--validation選項(xiàng)在傳輸后驗(yàn)證數(shù)據(jù),確定也使用-x選項(xiàng)在源表上放置排他鎖。

確保在目標(biāo)數(shù)據(jù)庫(kù)上創(chuàng)建每一個(gè)角色、函數(shù)和資源隊(duì)列。當(dāng)使用gptransfer -t選項(xiàng)時(shí),這些對(duì)象不會(huì)被會(huì)傳輸。

將postgres.conf和pg_hba.conf配置文件從源集群拷貝到目標(biāo)集群。

在目標(biāo)數(shù)據(jù)庫(kù)中用gppkg安裝所需的擴(kuò)展。

 

安全性

保護(hù)gpadmin用戶ID并且只允許對(duì)它進(jìn)行必需的系統(tǒng)管理員訪問。

在執(zhí)行特定的系統(tǒng)維護(hù)任務(wù)(例如升級(jí)或者擴(kuò)張)時(shí),管理員只應(yīng)作為gpadmin登入到Greenplum。

限制具有SUPERUSER角色屬性的用戶。成為超級(jí)用戶的角色能繞過Greenplum數(shù)據(jù)庫(kù)中的所有訪問特權(quán)檢查以及資源隊(duì)列。只有系統(tǒng)管理員應(yīng)該被給予超級(jí)用戶的權(quán)力。請(qǐng)見Greenplum數(shù)據(jù)庫(kù)管理員指南中的“修改角色屬性”。

數(shù)據(jù)庫(kù)用戶絕不應(yīng)該以gpadmin登錄,且ETL或者生產(chǎn)負(fù)載也絕不應(yīng)該以gpadmin運(yùn)行。

為每個(gè)登入的用戶分派一個(gè)不同的角色。

對(duì)于應(yīng)用或者Web服務(wù),考慮為每個(gè)應(yīng)用或服務(wù)創(chuàng)建一個(gè)不同的角色。

使用組管理訪問特權(quán)。

保護(hù)root口令。

為操作系統(tǒng)口令強(qiáng)制一種強(qiáng)口令策略。

確保重要的操作系統(tǒng)文件受到保護(hù)。

 

加密

加密和解密數(shù)據(jù)需要性能作為代價(jià),只加密需要加密的數(shù)據(jù)。

在生產(chǎn)系統(tǒng)中實(shí)現(xiàn)任何加密方案之前,先執(zhí)行性能測(cè)試。

生產(chǎn)Greenplum數(shù)據(jù)庫(kù)系統(tǒng)中的服務(wù)器證書應(yīng)該由一個(gè)數(shù)字證書認(rèn)證機(jī)構(gòu)(CA)簽發(fā),這樣客戶端可以認(rèn)證該服務(wù)器。如果客戶端都是機(jī)構(gòu)中的本地客戶端,CA可以是本地的。

只要客戶端到Greenplum數(shù)據(jù)庫(kù)的連接會(huì)通過不安全的鏈接,就應(yīng)該對(duì)其使用SSL加密。

對(duì)稱加密方案(加密和解密使用同樣的密鑰)具有比非對(duì)稱方案更好的性能,因此在密鑰能被安全共享時(shí)應(yīng)當(dāng)使用對(duì)稱加密方案。

使用pgcrypto包中的函數(shù)來加密磁盤上的數(shù)據(jù)。數(shù)據(jù)在數(shù)據(jù)庫(kù)進(jìn)程中被加密和解密,因此有必要用SSL保護(hù)客戶端連接以避免傳輸未加密數(shù)據(jù)。

在ETL數(shù)據(jù)被裝載到數(shù)據(jù)庫(kù)中或者從數(shù)據(jù)庫(kù)中卸載時(shí),是用gpfdists協(xié)議加密它。

 

高可用性

使用帶有8至24個(gè)磁盤的硬件RAID存儲(chǔ)方案。

使用RAID 1、5或6,這樣磁盤陣列能容忍一個(gè)失效的磁盤。

在磁盤陣列中配置一個(gè)熱后備以允許在檢測(cè)到磁盤失效時(shí)自動(dòng)開始重建。

通過鏡像RAID卷防止重建時(shí)整個(gè)磁盤陣列失效和退化。

定期監(jiān)控磁盤使用并且在需要時(shí)增加額外的空間。

監(jiān)控Segment傾斜以確保數(shù)據(jù)被平均地分布并且在所有Segment上存儲(chǔ)被平均地消耗。

設(shè)置一個(gè)后備Master以便在主Master失效后接管。

規(guī)劃當(dāng)失效發(fā)生時(shí),如何把客戶端切換到新的Master實(shí)例,例如,通過更新DNS中的Master地址。

設(shè)置監(jiān)控機(jī)制以便在主Master失效時(shí)在系統(tǒng)監(jiān)控應(yīng)用中或者通過email發(fā)出通知。

為所有的Segment設(shè)置鏡像。

將主Segment和它們的鏡像放置在不同的主機(jī)上以預(yù)防主機(jī)失效。

設(shè)置監(jiān)控機(jī)制以便在主Segment失效時(shí)在系統(tǒng)監(jiān)控應(yīng)用中或者通過email發(fā)出通知。

迅速地使用gprecoverseg工具失效的Segment,以便恢復(fù)冗余并且讓系統(tǒng)回到最佳平衡。

配置Greenplum數(shù)據(jù)庫(kù)發(fā)送SNMP通知給網(wǎng)絡(luò)監(jiān)控器。

在$MASTER_DATA_DIRECTORY/postgresql.conf配置文件中設(shè)置email通知,這樣Greenplum系統(tǒng)可以在檢測(cè)到嚴(yán)重問題時(shí)用email通知管理員。

考慮雙集群配置以提供額外層次上的冗余以及額外的查詢處理吞吐。

除非數(shù)據(jù)庫(kù)可以很容易地從來源恢復(fù),定期備份Greenplum數(shù)據(jù)庫(kù)。

如果堆表相對(duì)較小并且兩次備份之間只有很少的追加優(yōu)化或列存分區(qū)被修改,使用增量備份。

如果備份被保存到本地集群存儲(chǔ)上,在備份完成后將這些文件移動(dòng)到一個(gè)安全的、不在集群上的位置。

如果備份被保存到NFS掛載點(diǎn),使用例如Dell EMC Isilon之類的橫向擴(kuò)展NFS方案以避免IO瓶頸。

考慮使用Greenplum集成將備份流式傳送給Dell EMC Data Domain或者 Veritas NetBackup企業(yè)級(jí)備份平臺(tái)。

下一篇:Greenplum database系統(tǒng)配置!
上一篇:GoDiagram for WinForms:用于.NET圖表的高級(jí)控件!

                               

 京ICP備09015132號(hào)-996 | 違法和不良信息舉報(bào)電話:4006561155

                                   © Copyright 2000-2026 北京哲想軟件有限公司版權(quán)所有 | 地址:北京市海淀區(qū)西三環(huán)北路50號(hào)豪柏大廈C2座11層1105室

                         北京哲想軟件集團(tuán)旗下網(wǎng)站:哲想軟件 | 哲想動(dòng)畫

                            華滋生物