一、系统参数
基于Centos7.9 64位, greenplum 6.18,对共享内存、网络、用户限制等参数配置
sysctl 配置
#定义系统界别可用的所有共享内存页的数量,$(expr $(getconf _PHYS_PAGES) / 2)
kernel.shmall = 11322042
#定义单个进程在它本身的虚拟地址空间可以访问的单个共享内存段的最大值,$(expr $(getconf _PHYS_PAGES) / 2 \* $(getconf PAGE_SIZE))
kernel.shmmax = 46375084032
#定义在系统层面最大的共享内存段的数量
kernel.shmmni = 4096
#内存分配策略,0: 内核检测是否有足够的内存供应用使用,如果有允许申请,否则申请失败并把错误返回给应用;1:内核允许分配所有的物理内存,不论当前的内存状态如何;2:内核允许分配超过所有物理内存和交换空间总和的内存。
vm.overcommit_memory = 2
#系统分配给应用程序的内存百分比
vm.overcommit_ratio = 95
#随机分配端口的范围
net.ipv4.ip_local_port_range = 10000 65535
#打开内建的内核调试工具
kernel.sysrq = 1
#分别对应 semmsl 信号集容纳最大信号量、semmns 所有信号的最大量、semopm 调用单个信号集最大信号量、semmni 信号集的最大值
kernel.sem = 50100 128256000 50100 2560
#允许调试多线程应用程序
kernel.core_uses_pid = 1
#所有在消息队列中中的消息总和的最大值
kernel.msgmnb = 65536
#内核中消息队列中消息的最大值
kernel.msgmax = 65536
#系统范围最大消息队列数
kernel.msgmni = 2048
#允许cookies处理溢出的syn等待队列
net.ipv4.tcp_syncookies = 1
#允许接收含有源路由信息的IP包
net.ipv4.conf.default.accept_source_route = 0
#sync队列长度,可以容纳的等待连接的数量
net.ipv4.tcp_max_syn_backlog = 4096
#允许使用某一块网卡回应ARP询问
net.ipv4.conf.all.arp_filter = 1
#网络设备接收数据包的速率比内核处理的快时,允许送到队列的数据包的最大数目
net.core.netdev_max_backlog = 10000
#接收套接字缓冲区的最大字节数
net.core.rmem_max = 2097152
#发送套接字缓冲区的最大字节数
net.core.wmem_max = 2097152
#控制内存使用百分比(100-10)后开始使用交换分区
vm.swappiness = 10
#禁用内存域回收,当一个内存区域耗尽时不做内部回收从其他zone分配内存
vm.zone_reclaim_mode = 0
#与background_ratio一起作用,表示满足间隔时间内数据刷盘
vm.dirty_expire_centisecs = 500
#满足间隔时间内让数据刷盘完成
vm.dirty_writeback_centisecs = 100
#表示满足数据超过这个阈值数据刷盘
vm.dirty_background_ratio = 3
#满足cache数据超出设定的值后阻塞写请求,进行刷盘操作
vm.dirty_ratio = 10
#强制内核的内存管理器保留的空闲内存,一般为物理内存的3%
#awk 'BEGIN {OFMT = "%.0f";} /MemTotal/ {print "vm.min_free_kbytes =", $2 * .03;}' /proc/meminfo
#vm.min_free_kbytes = 471956
vm.min_free_kbytes = 1295134
limit 配置
#格式: 用户、@组 type(soft 当前系统生效的设置值,hard 系统能设定的最大值)
#每个用户可以打开的最大文件描述符数量
* soft nofile 524288
* hard nofile 524288
#每个用户可以打开的最大进程数
* soft nproc 131072
* hard nproc 131072
二、数据库参数
listen_addresses='*'
port=5432
#最大连接数,默认master 250, segemnt 750
max_connections = 250
#磁盘读写的内存缓冲区
shared_buffers = 125MB
#处于准备好状态的事务数,建议和master最大连接数一致。
max_prepared_transactions = 250
dynamic_shared_memory_type = posix
#预写日志分配的空间,wal被划分每64M的段文件,意味着每个segment分配1088M空间
checkpoint_segments=8
optimizer_analyze_root_partition = on
log_timezone = 'Asia/Shanghai'
#如果表还没有统计信息,写入数据时自动收集,这之后数据变化需要手动收集
gp_autostats_mode=on_no_stats
#自动收集统计信息的数据量变化阈值
gp_autostats_on_change_threshold=2147483647
log_autostats=off
datestyle = 'iso, mdy'
timezone = 'Asia/Shanghai'
lc_messages = 'en_US.utf8'
lc_monetary = 'en_US.utf8'
lc_numeric = 'en_US.utf8'
lc_time = 'en_US.utf8'
default_text_search_config = 'pg_catalog.english'
gp_resqueue_memory_policy = 'eager_free'
#追加表最大个数
max_appendonly_tables = 10000
gp_interconnect_type=udpifc
#primary等待mirror响应的时间
gp_segment_connect_timeout = 600s
#每个segment 分配的内存(primary)
#它通过计算所有Greenplum数据库进程可用的内存并且除以失效时主Segment的最大数量得到。如果#gp_vmem_protect_limit被设置得过高,查询可能会失败。使用下面的公式为gp_vmem_protect_limit计算一个安全值。
#使用这个公式计算gp_vmem(所有Greenplum数据库进程可用的内存):
#gp_vmem = ((SWAP + RAM) – (7.5GB + 0.05 * RAM)) / 1.7
#其中 其中SWAP是主机上的交换空间(以GB为单位),而RAM是安装在主机上的RAM的GB数。
#使用这个公式计算gp_vmem_protect_limit:
#gp_vmem_protect_limit = gp_vmem / max_acting_primary_segments
gp_vmem_protect_limit = 8192
include = 'internal.auto.conf'
shared_preload_libraries = 'metrics_collector'
gp_enable_query_metrics = on
log_statement=all
gp_contentid=-1
#资源限制类型,包括资源组和资源队列
gp_resource_manager='group'
#开启压缩溢出文件
gp_workfile_compression=on
#pljava路径
pljava_classpath='daybits.jar:cryptions.jar:daybitsc.jar'