?系統(tǒng)配置
首選操作系統(tǒng)
Red Hat Enterprise Linux (RHEL)是首選操作系統(tǒng)。應(yīng)該使用最新的受支持的主版本,當(dāng)前是RHEL 6。
文件系統(tǒng)
XFS是Greenplum數(shù)據(jù)庫數(shù)據(jù)目錄的最佳實(shí)踐文件系統(tǒng)。XFS應(yīng)該用下列選項(xiàng)掛載:

端口配置
ip_local_port_range應(yīng)該被設(shè)置為不與Greenplum數(shù)據(jù)庫端口范圍沖突。例如:

I/O配置
在含有數(shù)據(jù)目錄的設(shè)備上,blockdev預(yù)讀尺寸應(yīng)該被設(shè)置為16384。

應(yīng)該為所有數(shù)據(jù)目錄設(shè)備設(shè)置死線IO調(diào)度器。

應(yīng)該在/etc/security/limits.conf文件中增加OS文件和進(jìn)程的最大數(shù)量。

讓內(nèi)核文件輸出到一個(gè)已知的位置并且確保limits.conf允許內(nèi)核文件。

OS內(nèi)存配置
Linux中sysctl的變量vm.overcommit_memory和vm.overcommit_ratio反映了操作系統(tǒng)管理內(nèi)存分配的方式。這些變量應(yīng)該按照下面的方式設(shè)置:
vm.overcommit_memory決定OS用于確定為進(jìn)程可以分配多少內(nèi)存的方法。這個(gè)變量應(yīng)該總是被設(shè)置為2,它是對數(shù)據(jù)庫唯一安全的設(shè)置。
vm.overcommit_ratio是被用于應(yīng)用進(jìn)程的RAM的百分?jǐn)?shù)。在Red Hat Enterprise Linux上默認(rèn)是50。
不要啟用操作系統(tǒng)的中的巨型頁。
共享內(nèi)存設(shè)置
Greenplum數(shù)據(jù)庫使用共享內(nèi)存在postgres進(jìn)程之間通信,這些進(jìn)程是同一個(gè)postgres實(shí)例的組成部分。下面的共享內(nèi)存設(shè)置應(yīng)該在sysctl中設(shè)定并且很少會被修改。
驗(yàn)證操作系統(tǒng)
運(yùn)行g(shù)pcheck以驗(yàn)證操作系統(tǒng)配置。請見Greenplum數(shù)據(jù)庫工具指南中的gpcheck。
每臺主機(jī)上的Segment數(shù)量
每臺Segment主機(jī)上執(zhí)行的Segment數(shù)量的確定對總體系統(tǒng)性能有著巨大的影響。這些Segment與彼此以及主機(jī)上的其他進(jìn)程共享該主機(jī)的CPU核心、內(nèi)存和網(wǎng)絡(luò)接口。過高估計(jì)一臺服務(wù)器能容乃的Segment數(shù)量是導(dǎo)致非最優(yōu)性能的常見原因。
在選擇每臺主機(jī)上運(yùn)行多少Segment時(shí)必須要考慮的因素包括:
核心數(shù)量
安裝在該服務(wù)器上的物理RAM容量
NIC數(shù)量
附加到服務(wù)器的存儲容量
主Segment和鏡像Segment的混合
將在主機(jī)上運(yùn)行的ETL進(jìn)程
運(yùn)行在主機(jī)上的非Greenplum進(jìn)程
Segment內(nèi)存配置
gp_vmem_protect_limit服務(wù)器配置參數(shù)指定單個(gè)Segment的所有活動postgres進(jìn)程在任何給定時(shí)刻能夠消耗的內(nèi)存量。可使用下面的計(jì)算為gp_vmem_protect_limit估計(jì)一個(gè)安全值。
1,使用這個(gè)公式計(jì)算gp_vmem(Greenplum數(shù)據(jù)庫可用的主機(jī)內(nèi)存):

其中 SWAP是主機(jī)的交換空間(以GB為單位)而RAM是主機(jī)上安裝的RAM(以GB為單位)。
2,計(jì)算max_acting_primary_segments。當(dāng)鏡像Segment由于集群中其他主機(jī)上的Segment或者主機(jī)失效而被激活時(shí),這是能在一臺主機(jī)上運(yùn)行的主Segment的最大數(shù)量。例如,對于布置在每臺主機(jī)有8個(gè)主Segment的四主機(jī)塊中的鏡像來說,單一Segment主機(jī)失效將會在其所在塊中剩余每臺主機(jī)上激活2個(gè)或者3個(gè)鏡像Segment。這一配置的max_acting_primary_segments值是11(8個(gè)主Segment外加3個(gè)失效時(shí)激活的鏡像)。
3,通過將總的Greenplum數(shù)據(jù)庫內(nèi)存除以活動主Segment的最大數(shù)量來gp_vmem_protect_limit:

轉(zhuǎn)換成兆字節(jié)就是gp_vmem_protect_limit系統(tǒng)配置參數(shù)的設(shè)置。
對于有大量工作文件產(chǎn)生的場景,可調(diào)整gp_vmem的計(jì)算以考慮工作文件:

有關(guān)監(jiān)控和管理工作文件使用的信息請見Greenplum數(shù)據(jù)庫管理員指南。
用戶可以從gp_vmem的值計(jì)算操作系統(tǒng)參數(shù)vm.overcommit_ratio的值:

語句內(nèi)存配置
gp_statement_mem服務(wù)器配置參數(shù)是分配給Segment數(shù)據(jù)庫中任何單個(gè)查詢的內(nèi)存量。如果一個(gè)語句要求額外的內(nèi)存,它將溢出到磁盤。用下面的公式計(jì)算gp_statement_mem的值:
(gp_vmem_protect_limit * .9) / max_expected_concurrent_queries
例如,如果gp_vmem_protect_limit被設(shè)置為8GB(8192MB),對于40個(gè)并發(fā)查詢,gp_statement_mem的計(jì)算可以是:
(8192MB * .9) / 40 = 184MB
在每個(gè)查詢被溢出到磁盤之前,它被允許使用184MB內(nèi)存。
要安全地增加gp_statement_mem,用戶必須增加gp_vmem_protect_limit或者減少并發(fā)的查詢數(shù)量。要增加gp_vmem_protect_limit,用戶必須增加物理RAM或者交換空間,也可以減少每臺主機(jī)上的Segment數(shù)量。
注意在集群中增加Segment主機(jī)無助于內(nèi)存不足錯(cuò)誤,除非用戶使用額外的主機(jī)來減少每臺主機(jī)上的Segment數(shù)量。
弄明白溢出文件是什么。然后覆蓋gp_workfile_limit_files_per_query。用配置參數(shù)gp_workfile_limit_files_per_query可以控制每個(gè)Segment上每個(gè)查詢創(chuàng)建的溢出文件的最大數(shù)量。然后交代gp_workfile_limit_per_segment。
溢出文件配置
如果查詢沒有被分配足夠的內(nèi)存,Greenplum數(shù)據(jù)庫會在磁盤上創(chuàng)建溢出文件(也被稱為工作文件)。默認(rèn)單個(gè)查詢可以創(chuàng)建不超過100,000個(gè)溢出文件,這對大部分查詢來說都是足夠的。
用戶可以用配置參數(shù)gp_workfile_limit_files_per_query控制每個(gè)查詢和每個(gè)Segment創(chuàng)建的溢出文件最大數(shù)量。設(shè)置該參數(shù)為0將允許查詢創(chuàng)建無限個(gè)溢出文件。限制允許的溢出文件數(shù)量可以防止失控的查詢干擾系統(tǒng)。
如果一個(gè)查詢沒有被分配足夠的內(nèi)存或者被查詢數(shù)據(jù)中存在數(shù)據(jù)傾斜,查詢可能會生成大量溢出文件。如果查詢創(chuàng)建超過指定數(shù)量的溢出文件,Greenplum數(shù)據(jù)庫會返回這個(gè)錯(cuò)誤:
ERROR: number of workfiles per query limit exceeded
在提升gp_workfile_limit_files_per_query之前,嘗試通過更改查詢、改變數(shù)據(jù)分布或者更改內(nèi)存配置來降低溢出文件的數(shù)量。
gp_toolkit方案包括一些視圖可以允許用戶查看所有正在使用溢出文件的查詢的信息。這些信息可以被用來排查故障以及查詢調(diào)優(yōu):
gp_workfile_entries視圖中為每一個(gè)當(dāng)前在某個(gè)Segment上使用工作文件的操作符包含一行。
gp_workfile_usage_per_query視圖為每一個(gè)當(dāng)前在某個(gè)Segment上使用工作文件的查詢包含一行。
gp_workfile_usage_per_segment視圖為每個(gè)Segment包含一行。每一行顯示當(dāng)前在該Segment上用于工作文件的磁盤空間總量。
gp_workfile_compress_algorithm配置參數(shù)指定應(yīng)用于溢出文件的壓縮算法。它的值可以是none或者zlib。在使用溢出文件時(shí),設(shè)置這個(gè)參數(shù)為zlib可以提高性能。
如果一個(gè)查詢沒有被分配足夠的內(nèi)存或者被查詢數(shù)據(jù)中存在數(shù)據(jù)傾斜,查詢可能會生成大量溢出文件。如果查詢創(chuàng)建超過指定數(shù)量的溢出文件,Greenplum數(shù)據(jù)庫會返回這個(gè)錯(cuò)誤:
ERROR: number of workfiles per query limit exceeded
在提升gp_workfile_limit_files_per_query之前,嘗試通過更改查詢、改變數(shù)據(jù)分布或者更改內(nèi)存配置來降低溢出文件的數(shù)量。
京ICP備09015132號-996 | 違法和不良信息舉報(bào)電話:4006561155
© Copyright 2000-2026 北京哲想軟件有限公司版權(quán)所有 | 地址:北京市海淀區(qū)西三環(huán)北路50號豪柏大廈C2座11層1105室
北京哲想軟件集團(tuán)旗下網(wǎng)站:哲想軟件 | 哲想動畫