1023
技術社區[雲棲]
《Greenplum5.0 最佳實踐》 係統參數 <二>
《Greenplum 數據庫最佳實踐 》 係統參數配置
係統配置
本章主要描述在Greenplum部署之前,係統參數的配置
文件係統 (File System)
推薦使用XFS作為Greenplum默認文件係統
目前redhat,Centos 7.0 都開始使用XFS作為默認文件係統
如果係統不支持 需要使用下麵的掛載命令
** rw,noatime,nobarrier,nodev,inode64,allocsize=16m **
XFS相比較ext4具有如下優點:
XFS的擴展性明顯優於ext4,ext4的單個文件目錄超過200W個性能下降明顯
ext4作為傳統文件係統確實非常穩定,但是隨著存儲需求的越來越大,ext4漸漸不在適應
由於曆史磁盤原因,ext4的inode個數限製(32位),最多隻能支持40多億個文件,單個文件最大支持到16T
XFS使用的是64位管理空間,文件係統規模可以達到EB級別,XFS是基於B+Tree管理元數據
端口配置 (Port Configuration)
設置端口ip_local_port_range 它不應該和Greenplum 數據庫的端口範圍衝突 例如
net.ipv4.ip_local_port_range = 3000 65535
PORT_BASE = 2000
MIRROR_PORT_BASE = 2100
REPLICATION_PORT_BASE = 2200
MIRROR_REPLICATION_PORT_BASE = 2300
I/O 配置
包含數據目錄的設備的預讀大小應設為 16384
# /sbin/blockdev --getra /dev/sdb
16384
包含數據目錄的設備的I/O調度算法設置為deadline
# cat /sys/block/sdb/queue/scheduler
noop anticipatory [deadline] cfq
通過/etc/security/limits.conf 增大操作係統文件數和進程數
* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072
啟動core文件轉儲,並保存到已知位置,確保limits.conf中允許core轉儲文件
kernel.core_pattern = /var/core/core.%h.%t
# grep core /etc/security/limits.conf
* soft core unlimited
操作係統內存配置
Linux sysctl 的 vm.overcommit_memory 和 vm.overcommit_ratio 變量會影響操作係統對內存分配的管理 這些變量設置如下:
vm.overcommit_memory 決定係統分配多少內存給全部的進程,通常我們設置該值為2 這是一個非常安全的設置對於數據庫
vm.overcommit_ratio 是當前的內存被全部進程所使用的,默認值是50對於Red hat Enterprise linux
共享內存配置
共享內存主要用於postgres實例間通信,建議使用sysctl配置如下內存共享參數,不建議修改:
kernel.shmmax = 500000000
kernel.shmmni = 4096
kernel.shmall = 4000000000
驗證操作係統
使用gpcheck 驗證操作係統配置 參考《Greenplum數據庫工具指南》
設置節點上段數據庫的個數
確定每個段數據庫的個數對整體性能的巨大影響,這些段數據庫之間共享主機的CPU核、內存、網卡等,且和主機上的所有進程共享這些資源
段數據庫的個數需要參考如下的主機信息
主機的CPU核數
主機所含有的物理內存的數量
網卡個數和速度
主機所掛載的存儲大小
主節點和鏡像節點的數量
ETL進程是否運行在主機上
非Greenplum進程運行在主機上
段數據的配置
服務器配置參數 gp_vmem_protect_limit 控製了每個段數據庫為所有運行的查詢分配的內存總量,如果查詢所需要的內存超過此值,則會失敗,使用下麵公式確定合適的值
1. 計算gp_vmem,主機有多少內存可供Greenplum Database使用,使用如下公式:
gp_vmem = ((SWAP+RAM) - (7.5GB + 0,05*RAM)) / 1.7
SWAP 是主機的交換空間 單位GB
RAM 是主機所安裝的內存 單位GB
2.計算 max_acting_primary_segments
當段數據庫故障或者主機故障使得鏡像段(mirror segments)被激活時,該值用來表示在一個主機上可以運行的最大主段數量
配有四個主機塊的鏡像,每個主機上有8個主段。例如:一個單一的段數據庫失效將會激活2或者3個鏡像數據節點在每個剩餘主機上的失敗的 hosts's 塊上
max_acting_primart_segments = 8 + 3 = 11 (8個主段 + 3個被激活的鏡像節點)
3.計算gp_vmem_protect_limit , 使用Greenplum 數據庫可用的內存數GB 除以 所含有的段數據的數量(主段的數量)
gp_vmem_protected_limit = gp_vmem / max_acting_primary_segments
注: 這裏的單位使用的MB,所以 需要對計算結果進行單位轉換
對於生成大量工作文件(workfiles)的情況,需要調整gp_vmem已完成計算
gp_vmem=((SWAP+RAM) - (7.5GB + 0.05*RAM-(300KB*total_#_workfiles))) / 1.7
關於Greenplum中監控和管理workfile 的使用情況,需要參考 《Greenplum Database Administrator Guide》
計算 vm.overcommit_ratio
vm.overcommit_ratio = (RAM-0.026*gp_vmem) / RAM
例如:
8GB 交換空間
128GB 內存
vm.overcommit_ratio = 50
8個段數據庫
(8+(128*0.5))*0.9/8 = 8GB
則設置gp_vmem_protect_limit = 8GB, 需要轉換為 8192MB
SQL 語句內存配置
服務器配置參數 gp_statement_mem 控製段數據庫上單個查詢可以使用的內存總量,如果語句需要更多的內存,則會溢出數據到磁盤,用下麵公式確定合適的值
(gp_vmem_protected_limit *0.9)/max_expected_concurrent_queries
例如,如果並發度為40, gp_vmeme_protected_limit 為8GB,則gp_statement_mem
(8192MB*0.9)/40 = 184MB
每一個 查詢隻能分配184MB的內存,查詢的內存資源超過該值時,會溢出到磁盤文件中。
若想安全的增大gp_statement_mem,要麼增大gp_vmem_protect_limit,要麼降低並發。
增加gp_vmem_protect_limit,必須增大物理內存和交換空間,或者減少主機上運行的段數據的數量
注意:集群中飯加入更多的段數據庫實例並不能解決內存溢出(out-of-memory errors)的問題,除非像集群中添加更多的新主機,將每個主機上運行的段數據庫數量降低下來
當沒有足夠的內存用來存放mapper的輸出,80%的Buffer被占用時,係統就會創建溢出文件
溢出文件參數配置
在Greenplum數據庫集群中,溢出文件 (spill files)也別稱為 工作文件(workfile),它是指當查詢申請的內存不足以應對查詢所需的資源時,(內存分配不足)。默認情況下,
一個單一的查詢不能創建多餘100000個溢出文件,這對於大多數查詢任務來說,足夠用了。
我們可以通過設置 gp_workfile_limit_files_per_query 這個參數來修改最大數量的溢出文件, 這個值可以從0設置到無窮大。限製溢出文件的數量可以保證處查詢運行中,係統的崩潰。
當內存不足以分配給改查詢或者數據傾斜引起一個查詢任務產生很多溢出文件。當這個查詢任務產生的溢出文件數量超過閾值時,Greenplum會拋出異常
ERROR: number of workfiles per query limit exceeded
當我們準備調整溢出文件參數 gp_workfile_limit_files_per_query 限製時,可以先考慮修改我們的查詢語句以達到減少溢出文件的數量(減小中間結果集的大小),改變分布鍵(分布鍵引起數據分布不均勻,造成計算傾斜),調整內存參數
gp_toolkit
gp_toolkit 模式包含視圖,允許我們查看當前的查詢所使用的溢出文件的數量。這個參數可以用來排除故障和調優查詢, 注意如下視圖
gp_workfile_usage_per_query 視圖
使用一行存儲,當前時間段中,一個段數據庫的一個操作的workfile所占用的磁盤空間
gp_workfile_usage_per_query 視圖
使用一行記錄,當前時間段中,有個段數據庫的一個查詢的workfile所占的磁盤空間大小
gp_workfile_usage_per_segment 視圖
每一個段一行記錄。
每一行記錄都顯示當前的workfile所使用的磁盤空間的總量
查看 《Greenplum Database Reference Guide》 去看每一個視圖的字段信息
參數 gp_workfile_compress_algorithm 參數是用來控製溢出文件的。它可以被設置為 none(默認)或者 zlib。設置為zlib,可以提升溢出文件的性能。
參考網址:
https://gpdb.docs.pivotal.io/500/best_practices/sysconfig.html
最後更新:2017-10-21 21:03:20