###########2021-03-22:gp參數調整記錄########### gpconfig -c max_connections -v 1250 -m 250 #segment為master的5-10倍 gpconfig -c max_prepared_transactions -v 250 #和master的max_connections參數配置一致 gpconfig -c shared_buffers -v 8192MB #至少>max_connections*16k gpconfig -c gp_vmem_protect_limit -v 46933 #為在每個segment數據庫中完成的所有 工作分配的最大內存 gp_vmem(Greenplum數據庫可用的主機內存): gp_vmem = ((SWAP + RAM) – (7.5GB + 0.05 * RAM)) / 1.7 = (500 -(7.5+0.05*500))/1.7 = 275G max_acting_primary_segments = 4 (格外加2個容錯的primary)=6 gp_vmem_protect_limit = gp_vmem / max_acting_primary_segments = 275/6=46G = 46933MB gpconfig -c statement_mem -v 1408MB #statement_mem服務器配置參數是分配給segment數據庫中任何單個查詢的內存量 statement_mem =((gp_vmem_protect_limit * .9) / max_expected_concurrent_queries) = 46 933*0.9/30 =1408MB gpconfig -c effective_cache_size -v 250GB #250GB (物理內存一半),設置有關Postgres查詢優化器(計划程序)的單個查詢可用的磁盤高速緩存的有效大小的假設,估算使用指數的成本的因素; 較高的值使得更有可能使用索引掃描,較低的值使得更有可能使用順序掃描 gpconfig -c work_mem -v 25600MB #設置每個segment內存排序的大小,先測試為系統總內存的5%=5%*500=25G=25*1024=25600MB gpconfig -c temp_buffers -v 2048 #默認1024,以允許每個數據庫會話使用臨時緩沖區。 這些是僅用於訪問臨時表的會話本地緩沖區 gpconfig -c gp_fts_probe_threadcount -v 32 #默認16個,故障檢測的線程數。大於等於每個節點的segment數。 gpconfig -c gp_hashjoin_tuples_per_bucket -v 5 #默認5,設置HashJoin操作使用的哈希表的目標密度。 較小的值往往會產生較大的哈希表,這可以提高連接性能 gpconfig -c gp_interconnect_setup_timeout -v 2h #默認2h,指定在超時之前等待Greenplum數據庫interconnect完成設置的時間 gpconfig -c max_statement_mem -v 8192MB #2000M,設置查詢的最大內存限制 gpconfig -c gp_resqueue_priority_cpucores_per_segment -v 6 #默認4,指定每個segment實例分配的CPU單元數 gpconfig -c maintenance_work_mem -v 12GB #默認16MB,指定要在維護操作中使用的最大內存量,例如VACUUM和CREATE INDEX。指定要在維護操作中使用的最大內存量,例如VACUUM和CREATE INDEX。 gpocnfig -c gp_vmem_protect_segworker_cache_limit -v 2048 #默認500,如果查詢執行程序進程消耗的數量超過此配置的數量,則在進程完成后,將不會高速緩存該進程以用於后續查詢。 ################內核參數調整################### SHMMAX > shared_buffers + other_seg_shmem #對於Greenplum數據庫segment,other_seg_shmem的值大約為111MB, 對於Greenplum數據庫master,大約為79MB。 SHMALL > (num_instances_per_host * ( shared_buffers + other_seg_shmem )) + other_app_shared_mem 假如shared_buffers=8G=8*1024*1024*1024 => SHMMAX > 8*1024*1024*1024 + (111*8+79)*1024*1024 =9603907584 #494780232499 #500 000 000 SHMALL > (8*(8*1024*1024*1024 + (111*8+79)*1024*1024)) =76831260672 #120795955 #4 000 000 000 vm.overcommit_ratio= 95 vm.overcommit_ratio = (RAM - 0.026 * gp_vmem) / RAM =(500-0.026*275)/500=0.9857 (取95) overcomit_memory= 2 echo 10 > /proc/sys/vm/swappiness #vm.swappiness,控制如何使用swap分區,建議設置為10 echo 0 > /proc/sys/vm/zone_reclaim_mode #vm.zone_reclaim_mode,控制一個內存區域內部的內存耗盡時,如何進行內存回收。0表示關閉zone_reclaim模式,從其他zone或者NUMA節點回收內存 echo 500 > /proc/sys/vm/dirty_expire_centisecs #vm.dirty_expire_centisecs,控制內核寫緩沖區的舊數據比列,建議500,5s的數據就算舊數據,dpflush進程將這些舊數據寫到磁盤 echo 100 > /proc/sys/vm/dirty_writeback_centisecs #vm.dirty_writeback_centisecs,控制內核的臟數據刷新線程pdflush的運行間隔時間,建議設置為100,也就是1s echo 0 > /proc/sys/vm/dirty_background_ratio #vm.dirty_background_ratio,控制文件系統的pdflush進程何時刷新磁盤。0代表試用寫緩沖 echo 0 > /proc/sys/vm/dirty_ratio #vm.dirty_ratio,控制文件系統寫緩沖區的大小。0代表不使用寫緩沖。 echo 1610612736 > /proc/sys/vm/dirty_background_bytes #vm.dirty_background_bytes,當臟頁所占內存達到該值,內核的pdflush線程開始會寫臟頁。 echo 4294967296 > /proc/sys/vm/dirty_bytes #vm.dirty_bytes,控制臟頁占內存的數量,達到該值,執行磁盤寫操作。 參考:https://support.huaweicloud.com/tngg-kunpengdbs/kunpenggreenplum_05_0013.html ##################網絡參數調整####################### echo "10000 65535" > /proc/sys/net/ipv4/ip_local_port_range #net.ipv4.ip_local_port_range,定義了地tcp/udp的端口范圍。可以理解為系統中的程序會選擇這個范圍內的端口來連接到目的端口。 echo 1024 > /proc/sys/net/core/somaxconn #net.core.somaxconn,服務端所能accept即處理數據的最大客戶端數量,即完成連接上限。默認值是128,建議修改成1024。 echo 16777216 > /proc/sys/net/core/rmem_max #net.core.rmem_max,接收套接字緩沖區大小的最大值。默認值是229376,建議修改成16777216。 echo 16777216 > /proc/sys/net/core/wmem_max #net.core.wmem_max,發送套接字緩沖區大小的最大值(以字節為單位)。默認值是229376,建議修改成16777216。 echo "4096 87380 16777216" > /proc/sys/net/ipv4/tcp_rmem #net.ipv4.tcp_rmem,配置讀緩沖的大小,三個值,第一個是這個讀緩沖的最小值,第三個是最大值,中間的是默認值。默認值是"4096 87380 6291456",建議修改成"4096 87380 16777216"。 echo "4096 65536 16777216" > /proc/sys/net/ipv4/tcp_wmem #net.ipv4.tcp_wmem,配置寫緩沖的大小,三個值,第一個是這個寫緩沖的最小值,第三個是最大值,中間的是默認值。默認值是"4096 16384 4194304",建議修改成"4096 65536 16777216"。 echo 360000 > /proc/sys/net/ipv4/tcp_max_tw_buckets #net.ipv4.max_tw_buckets,表示系統同時保持TIME_WAIT套接字的最大數量。默認值是2048,建議修改成360000 參考:https://support.huaweicloud.com/tngg-kunpengdbs/kunpenggreenplum_05_0011.html ##################磁盤和I/O########################## mount -o rw,nodev,noatime,nobarrier,inode64 /dev/dfa /data #掛載 /sbin/blockdev --setra 16384 /dev/dfa #配置readhead,減少磁盤的尋道次數和應用程序的I/O等待時間,提升磁盤讀I/O性能 echo deadline > /sys/block/dfa/queue/scheduler #配置IO調度,deadline更適用於Greenplum數據庫場景 grubby --update-kernel=ALL --args="elevator=deadline" vi /etc/security/limits.conf #配置文件描述符 #添加如下行 * soft nofile 65536 * hard nofile 65536 * soft nproc 131072 * hard nproc 131072 #####################其他配置################################# grubby --update-kernel=ALL --args="transparent_hugepage=never" #禁用THP vim /etc/systemd/logind.conf #設置RemoveIPC RemoveIPC=no 參考:http://docs-cn.greenplum.org/v6/best_practices/sysconfig.html