###########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