Greenplum参数调整优化记录
发布日期:2021-05-09 09:33:18 浏览次数:21 分类:博客文章

本文共 5120 字,大约阅读时间需要 17 分钟。

###########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*16kgpconfig -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 = 46933MBgpconfig -c statement_mem -v 1408MB  #statement_mem服务器配置参数是分配给segment数据库中任何单个查询的内存量    statement_mem =((gp_vmem_protect_limit * .9) / max_expected_concurrent_queries)              = 46 933*0.9/30 =1408MBgpconfig -c effective_cache_size -v 250GB  #250GB (物理内存一半),设置有关Postgres查询优化器(计划程序)的单个查询可用的磁盘高速缓存的有效大小的假设,估算使用指数的成本的因素; 较高的值使得更有可能使用索引扫描,较低的值使得更有可能使用顺序扫描gpconfig -c work_mem -v   25600MB #设置每个segment内存排序的大小,先测试为系统总内存的5%=5%*500=25G=25*1024=25600MBgpconfig -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 000vm.overcommit_ratio= 95    vm.overcommit_ratio = (RAM - 0.026 * gp_vmem) / RAM                      =(500-0.026*275)/500=0.9857 (取95)overcomit_memory= 2echo 10 > /proc/sys/vm/swappiness  #vm.swappiness,控制如何使用swap分区,建议设置为10echo 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,也就是1secho 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" #禁用THPvim /etc/systemd/logind.conf  #设置RemoveIPCRemoveIPC=no参考:http://docs-cn.greenplum.org/v6/best_practices/sysconfig.html

 

上一篇:软件架构之道的一次感悟
下一篇:Greenplum扩容详解

发表评论

最新留言

不错!
[***.144.177.141]2025年04月29日 08时08分53秒