vi /etc/security/limits.conf
kingbase hard nofile 655360
kingbase soft nofile 655360
kingbase hard nproc 655360
kingbase soft nproc 655360
修改之后,还需要在 vi /etc/pam.d/login 最后加上一行: session required pam_limits.so
关闭NUMA
vi /etc/sysctl.conf
vm.zone_reclaim_mode = 0
kernel.numa_balancing=0
sysctl -p
numactl --interleave=all pg_ctl start -D $PGDATA
修改内核参数:
vi /etc/sysctl.conf
kernel.sem = 5010 5130240 5010 1024
#SEMMSL 每个信号量set中信号量最大个数 设置:最小250;对于processes参数设置较大的系统建议设置为processes+10
#SEMMNS linux系统中信号量最大个数 设置:至少32000;SEMMSL * SEMMNI
#SEMOPM semop系统调用允许的信号量最大个数设置:至少100;或者等于SEMMSL
#SEMMNI linux系统信号量set最大个数 设置:最少128。ceil((max_connections + autovacuum_max_workers + max_worker_processes + 5) / 16)
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 3774873
#shmmax/PAGE_SIZE
kernel.shmmax = 8589934592
#建议物理内存的80%,这样share buffer几乎不会超过物理内存的80%,可以保证share buffer在一个内存段内。
kernel.shmmni = 4096
#共享内存段的最大数量,4096足以。
vm.swappiness=0
vm.overcommit_memory = 0
#0 试探式的overcommit,1 对内存申请来者不拒,2 禁止overcommit
vm.overcommit_ratio = 90
#禁止overcommit的阈值 (Physical RAM * vm.overcommit_ratio / 100) + Swap)
vm.dirty_background_ratio=1
vm.dirty_ratio = 80
# TCP端口使用范围
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.ip_local_port_range = 10000 65000
net.ipv4.tcp_max_syn_backlog = 4096
#不完整套接字(连接)队列的最大长度
net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.tcp_fin_timeout = 30
# 记录的那些尚未收到客户端确认信息的连接请求的最大值
net.core.somaxconn=4096
#它指定了完全建立的等待被接受的套接字的队列长度
net.core.netdev_max_backlog = 32768
net.core.wmem_max = 1048576
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_wmem = 8192 436600 873200
net.ipv4.tcp_rmem = 32768 436600 873200
net.ipv4.tcp_mem = 94500000 91500000 92700000
net.ipv4.tcp_max_orphans = 3276800
#重新加载生效
sysctl -p
应用程序的backlog是已经三次握手好的总数,对应net.core.somaxconn。
PostgreSQL 10
1.PostgreSQL 10 实现了声明式分区,PostgtreSQL 11完善了功能,PostgreSQL 12提升了性能。
2.PostgreSQL 10 增加了并行功能
3.PostgreSQL 10之后 hash索引可以走流复制,从此可以大胆的使用hash索引了。
4.PostgreSQL 10之后提供了逻辑复制的功能:发布订阅的功能
5.PostgreSQL 10可以把多列组合在一起再建直方图,让一些关联列上的执行计划更准确
6.可以支持同步复制到多个standby,即Quorum Commit
7.以前的密码验证式md5,现在增加了安全级别更高的密码验证的方式:SCRAM-SHA-256
PostgreSQL 11
1.JIT即时编译功能,提升一些批计算如SUM的性能,通常提升在10%左右。
2.存储过程中可以加commit或rollback事物
3.声明式分区表功能大大增强: 分区表可以加主键、外键、索引,支持hash分区表
4.CREATE INDEX可以并行
5.增加非空列也是瞬间完成,不需要rewrite表
6.hash join支持并行
7.vacuum增强:空闲空间可以更快的被重用,跳过一些没有必要的索引扫描
8.提升了多个并发事务commit的性能
9.逻辑复制支持truncate的同步
10.支持存储过程(CREATE PROCEDURE),并可以在存储过程中嵌入事务
11.CREATE INDEX使用INCLUDE可以非键值列放到索引中,以便走Covering indexes而不必回表
12.以前触发toast的压缩都需要插入的数据大于1996个字节时才会触发,这个1996字节是固定的,不能改,现在给表加了存储参数 13.toast_tuple_target,可以设置更新的值就可以触发toast的压缩机制
14.允许在initdb时改变 WAL文件的大小,以前是需要重新编译程序才能改变WAL文件的大小
15.现在在WAL日志中会把使用的部分填0,这样可以提高压缩率
PostgreSQL 12
1.PostgreSQL 12开始取消了recovery.conf,把配置项移动到postgresql.conf中
为了表明此库是备库,需要在$PGDATA下建standby.signal 空文件。去掉了配置项standby_mode
配置项trigger_file改名为promote_trigger_file
PostgreSQL 12 只能同时配置恢复目标项的一项,不能同时配置:recovery_target, recovery_target_lsn, recovery_target_name, recovery_target_time, recovery_target_xid
pg_stat_replication中增加了应用延迟时间字段: reply_time
2.减少了在创建GiST,GIN,SP-GiST索引的WAL日志量
3.max_wal_senders 连接数从 max_connections 剥离
4.支持在线重建索引:REINDEX CONCURRENTLY
5.在Btree索引中减少了不必要的多版本数据,提升了性能。
6.PG12默认开启了JIT
7.提升了position函数的性能
8.SERIALIZABLE事物事物隔离级别也可以并行查询
9.VACUUM增加了选项TRUNCATE,有可能不需要vacuum full也能释放部分空间到操作系统
10.分区表的性能得到了加强。
PostgreSQL 13
1.对vacumm增加了并行的功能
2.改变流复制的配置可以不用重启数据库了
3.更多的一些情况下可以对分区进行裁剪和智能join
如原先智能join必须两个分区的范围精确相同,现在可以更智能了。CAFjFpRdjQvaUEV5DJX3TW6pU5eq54NCkadtxHX2JiJG_GvbrCA@mail.gmail.com"">https://www.postgresql.org/message-id/CAFjFpRdjQvaUEV5DJX3TW6pU5eq54NCkadtxHX2JiJG_GvbrCA@mail.gmail.com
三个表的full outer join也可以走wise join
分区智能join是从PostgreSQL 11版本添加的功能
4.分区表可以支持before trigger(不允许改变插入数据的目标分区)
5.分区表可以支持逻辑复制了
之前只能把分区表的各个分区单独的做为复制源,现在可以把分区表直接做为复制源。
先前订阅者只能把数据同步到非分区表,现在可以把数据同步到分区表
Allow whole-row variables (that is, table.*) to be used in partitioning expressions (Amit Langote)
支持异构分区表逻辑复制: http://www.postgres.cn/v2/news/viewone/1/604
https://www.postgresql.org/message-id/flat/CA+HiwqH=Y85vRK3mOdjEkqFK+E=ST=eQiHdpj43L=_eJMOOznQ%40mail.gmail.com
6.索引中重复的项做了优化处理,更节省空间。重复的项只存储一次
7.聚合时使用hash算法可以使用磁盘做溢出存储
8.增量排序(Incremental sort)的功能
9.提升了PL/pgSQL中简单表达式的性能
10.pg_stat_statements插件增加了选项可以跟踪SQL的planning time,而不仅仅是执行时间
PostgreSQL 14
1.对大量的数据库链接时的事务吞吐量有了很大的改进,不光是事务在活动状态,在空闲状态也包括在内。
2.进一步减少了 B-树索引的资源消耗,包括频繁更新索引导致的表膨胀。GiST 索引可以在构建过程中预先排序数据,能够更快地创建索引并减少索引大小。SP-GiST 索引支持覆盖索引,可以使用 INCLUDE 子句为索引增加不可搜索的额外字段。
3.增加了许多并行查询功能。除了对并行顺序扫描的整体性能提升之外,PL/pgSQL 中的 RETURN QUERY 指定现在可以并行执行,REFRESH MATERIALIZED VIEW 命令也可以使用并行查询。
4.还增加了使用 FDW 查询远程数据库时的并行执行功能。
5.改进了分区系统,包括更新或删除数据行影响很少分区时的性能提升。PostgreSQL 14 可以使用 ALTER TABLE … DETACH PARTITION … CONCURRENTLY 命令以非阻塞的方式卸载分区。
6.增量排序功能在 PostgreSQL 14 中可以用于窗口函数。
7.支持lz4压缩
8.VACUUM性能提升,并针对索引进行了优化。Autovacuum支持分区表。ANALYZE性能提升,新增maintain_io_concurrency参数。
9.新增pg_stat_progress_copy视图跟踪COPY的进度。
10.新增pg_stat_wal视图跟踪WAL活动,并从pg_stat_replication_slots视图检查复制槽的统计数据。
11.REINDEX支持分区表子分区索引。
12.增加了pg_amcheck工具来检查数据损坏。
PostgreSQL 15
1.Merge SQL COMMAND
2.更多JOSN 的函数
3.•public模式create权限默认被回收,public模式owner变为pg_database_owner
4.pg_basebackup 命令添加了压缩的功能,针对备份可以选择直接进行压缩
5.针对POSTGRESQL FULL PAGE 的工作是其他数据库使用者吐糟的一个地方,如同MYSQL的 DOUBLE WRITE, PG15 针对这个问题提供了两种对FULL PAGE 的压缩功能,LZ4 , ZSTD 等两个压缩方式