Greenplum數(shù)據(jù)庫集群中,內存管理對性能有顯著的影響。默認設置適合于大部分環(huán)境。不要更改默認設置,除非理解系統(tǒng)上的內存特點和使用。
解決內存不足錯誤
為Greenplum數(shù)據(jù)庫配置內存
內存配置計算實例
配置資源隊列
解決內存不足錯誤
內存不足錯誤消息表明Greenplum的Segment、主機和進程遇到了內存不足錯誤。例如:

Greenplum數(shù)據(jù)庫中一些常見的導致內存不足的情況是:
集群上可用的系統(tǒng)內存(RAM)不足
內存參數(shù)配置不當
Segment級別有數(shù)據(jù)傾斜
查詢級別有操作性傾斜
下面是內存不足情況的可能解決方案:
調優(yōu)查詢以要求較少的內存
使用資源隊列降低查詢并發(fā)
降低Greenplum集群中每臺主機上的Segment數(shù)量
增加主機上的內存
在數(shù)據(jù)庫級別上驗證gp_vmem_protect_limit配置參數(shù)。最大安全設置的計算請見為Greenplum數(shù)據(jù)庫配置內存。
使用會話設置來降低特定查詢使用的statement_mem
在數(shù)據(jù)庫級別降低statement_mem
在資源隊列上設置內存限額以限制資源隊列中執(zhí)行的查詢所使用的內存
向集群中增加Segment主機本身不會緩解內存不足問題。每個查詢使用的內存由statement_mem參數(shù)決定,并且在查詢被調用時會設置它。不過,如果增加更多的主機允許每臺主機上的Segment數(shù)量降低,那么gp_vmem_protect_limit中分配的內存量就可以上升。
為Greenplum數(shù)據(jù)庫配置內存
如果周到地管理內存,大部分內存不足的情況是可以避免的。
并不總是可以增加系統(tǒng)內存,但是用戶可以通過正確地配置內存使用和設置資源隊列管理預期負載來防止內存不足的情況。
有必要考慮由于失效導致鏡像Segment變成主Segment的內存需求,以確保在主Segment或者Segment主機失效時集群能夠繼續(xù)運轉。
下面是推薦的操作系統(tǒng)以及Greenplum數(shù)據(jù)庫內存設置:
不要配置OS使用巨型頁。
vm.overcommit_memory
這是一個Linux內核參數(shù),在/etc/sysctl.conf中設置。它應該總是被設置為2。它決定OS判斷可以給進程分配多少內存時使用的方法,2是對于Greenplum數(shù)據(jù)庫唯一安全的設置。
vm.overcommit_ratio
這是一個Linux內核參數(shù),在/etc/sysctl.conf中設置。它是可以用于應用進程的RAM的百分數(shù)。剩余的保留給操作系統(tǒng)。Red Hat上默認為50。
把vm.overcommit_ratio設置得太高可能會導致沒有為操作系統(tǒng)保留足夠的內存,進而導致Segment主機失效或者數(shù)據(jù)庫失效。將這個值設置得太低會降低并發(fā)量和通過降低Greenplum數(shù)據(jù)庫可用內存量能運行的查詢復雜度。在增加這一設置時,有必要記住總是為操作系統(tǒng)活動保留一些內存。
為vm.overcommit_ratio計算值的方法請見Segment內存配置。
gp_vmem_protect_limit
使用gp_vmem_protect_limit設置實例能夠為在每個Segment數(shù)據(jù)庫中完成的所有工作分配的最大內存。不要把這個值設置得高于系統(tǒng)上的物理RAM。如果gp_vmem_protect_limit太高,有可能耗盡系統(tǒng)上的內存并且正常的操作可能會失敗,導致Segment失效。如果gp_vmem_protect_limit被設置為一個安全的較低值,系統(tǒng)上真正的內存耗盡就能避免。查詢可能會因為達到限制而失敗,但是系統(tǒng)崩潰和Segment失效可以避免,這也是我們想要的行為。
為gp_vmem_protect_limit計算安全值的方法請見Segment內存配置。
runaway_detector_activation_percent
失控查詢終止在Greenplum數(shù)據(jù)庫4.3.4中被引入,它能防止內存不足的問題。runaway_detector_activation_percent系統(tǒng)參數(shù)控制觸發(fā)查詢終止的gp_vmem_protect_limit內存利用率。默認它被設置為90%。如果一個Segment利用的gp_vmem_protect_limit memory內存的百分比超過指定的值,Greenplum數(shù)據(jù)庫會基于內存使用終止查詢,從消耗內存量最大的查詢開始。查詢會被挨個終止直至 gp_vmem_protect_limit的利用率重新低于指定的百分比。
statement_mem
使用statement_mem分配每個Segment數(shù)據(jù)庫中一個查詢所使用的內存。如果要求額外的內存,將會溢出到磁盤。按照下面的額方式為statement_mem設置最優(yōu)值:

statement_mem的默認值是125MB。例如,一個使用默認statement_mem值運行在Dell EMC DCA V2系統(tǒng)上的查詢將在每臺Segment服務器上使用1GB內存(8個Segment ? 125MB)。為要求額外內存完成的特定查詢在會話級別上設置statement_mem。在并發(fā)性低的集群上這種設置可以很好地管理查詢內存。對于高并發(fā)的集群還是要使用資源隊列來控制在系統(tǒng)上運行什么以及運行多少。
gp_workfile_limit_files_per_query
設置gp_workfile_limit_files_per_query以限制每個查詢允許使用的臨時溢出文件(工作文件)的最大數(shù)量。當查詢要求的內存比它能分配的更多時,它將創(chuàng)建溢出文件。當上述限制被超過時,查詢會被中止。默認值為零,允許無限多的溢出文件并且可能會填滿文件系統(tǒng)。
gp_workfile_compress_algorithm
如果有很多溢出文件,則設置gp_workfile_compress_algorithm為壓縮這些溢出文件。壓縮溢出文件可能有助于避免IO操作導致磁盤子系統(tǒng)過載。
內存配置計算實例
總RAM = 256GB
SWAP = 64GB
一個塊中有4臺主機,每臺主機上8個主Segment和8個鏡像Segment
失效期間每臺主機上的主Segment最大數(shù)目是11
vm.overcommit_ratio calculation

把vm.overcommit_ratio設置為98。
gp_vmem_protect_limit calculation

配置資源隊列
Greenplum數(shù)據(jù)庫的資源隊列為管理集群負載提供了一種強有力的機制。隊列可以被用來限制活動查詢的數(shù)量以及隊列中查詢可使用的內存量。當查詢被提交給Greenplum數(shù)據(jù)庫時,它會被加入一個資源隊列,資源隊列會決定該查詢是否應該被接受并且何時有資源可用來執(zhí)行它。
不要使用默認隊列。把所有角色關聯(lián)到一個用戶定義的資源隊列。
每個登錄用戶(角色)都被關聯(lián)到單個資源隊列,任何該用戶提交的查詢都由關聯(lián)的資源隊列處理。如果沒有為用戶的查詢明確地分派一個隊列,則會由默認隊列pg_default處理之。
不要用gpadmin角色或者其他超級用戶角色運行查詢。
超級用戶會被從資源隊列限制中排除,因此超級用戶的查詢運行不會考慮在其所屬隊列上設置的限制。
使用ACTIVE_STATEMENTS資源隊列參數(shù)來限制特定隊列成員能夠并發(fā)運行的活動查詢數(shù)量。
使用MEMORY_LIMIT參數(shù)控制通過隊列運行的查詢可以利用的內存總量。通過組合ACTIVE_STATEMENTS和MEMORY_LIMIT屬性,管理員可以完全控制從一個給定資源隊列發(fā)出的活動。
分配按如下方式進行:假定資源隊列sample_queue的ACTIVE_STATEMENTS被設置為10,而MEMORY_LIMIT被設置為2000MB。這限制該隊列在每個Segment上使用大約2GB內存。對于每臺服務器有8個Segment的集群,sample_queue在每臺服務器上的總用量是16GB(2GB * 8 Segment/服務器)。如果Segment服務器有64GB內存,系統(tǒng)中可以有不超過四個這種資源隊列,再多就會內存不足(4隊列 * 16GB/隊列)。
注意通過使用STATEMENT_MEM,運行在隊列中的個體查詢能夠分配超過其內存“份額”的內存,從而降低隊列中其他查詢可用的內存。
資源隊列優(yōu)先級可以被用來排列具有預期結果的負載。帶有MAX優(yōu)先權的隊列會扼殺所有其他隊列中的活動,直至MAX隊列完成所有查詢的運行。
根據(jù)負載和現(xiàn)狀動態(tài)修改資源隊列以匹配隊列的實際需求。
典型的環(huán)境中有基于當前情況和系統(tǒng)適用類型而改變的操作流程。用戶可以把這些更改寫成腳本并且增加crontab項來執(zhí)行這些腳本。
使用gptoolkit查看資源隊列使用以及理解隊列如何工作。
京ICP備09015132號-996 | 違法和不良信息舉報電話:4006561155
© Copyright 2000-2026 北京哲想軟件有限公司版權所有 | 地址:北京市海淀區(qū)西三環(huán)北路50號豪柏大廈C2座11層1105室
北京哲想軟件集團旗下網(wǎng)站:哲想軟件 | 哲想動畫