我从一个使用者的角度,简单罗列了一下PG13大版本的更新,这些内容我觉得是对业务用户,对DBA比较常用,也是影响比较大的点。
简单总结的话——PG13对DBA更友好了~~~
参数变更
wal_keep_segments更名为wal_keep_size,按MB为单位设置大小,不再是按照之前的WAL文件个数来设置
wal_keep_size = wal_keep_segments * wal_segment_size (typically 16MB)
服务端的功能变更
一、分区表
- 查询优化器能更智能去做分区裁剪,需要打开“enable_partition_pruning”参数(默认就是on)
- 能在更多的场景下使用分区表之间的join,需要打开“enable_partitionwise_join”参数(默认是off),但是这个参数打开之后,在执行计划生成期间,会占用更多的CPU和内存
- 支持行级before触发器
- 支持在逻辑复制中发布/订阅分区表,以前是需要每个分区子表单独发布/订阅,现在可以通过父表自动发布
二、索引
- Btree索引引入了个名为deduplicated的技术,能有效减小索引大小,当索引包含很多重复的键值的时候
- 强制要求索引的排序规则和列的排序规则保持一致(collations)
三、性能相关
- 支持增量排序
- 追加了一个hash_mem_multiplier参数,当有一个大的聚合查询的时候,允许hash聚合的结果集落盘
- 单纯的insert行为可以出发autovacuum,以前只会出发autoanalyze,目的是尽快的去更新行的可见性标志位(infomask),实施freeze的行为
- 提升了超大表的truncate性能
- int转text性能提升
四、监控相关
- 支持在explain,auto_explain,autovacuum和pg_stat_statements内跟踪WAL使用情况
- 允许以采样的模式去日志里记录SQL,涉及log_statement_sample_rate参数
- 追加了一个backtrace_functions参数,当C函数执行报错的时候,可以记录函数堆栈信息,不是全平台支持,且堆栈信息的多寡取决于编译选项,对开发人员比较友好
五、系统视图
- pg_stat_activity里面追加了- leader_pid的列,可以看并行进程的父进程是谁
- 追加pg_stat_progress_basebackup来追踪备份进度
- 追加pg_shmem_allocations来查看share buffer的使用情况
- 追加pg_stat_slru来观察SLRU缓存
- track_activity_query_size最高可以设置到1MB,以前100KB
六、等待事件
简单列一下追加的事件名称,没有细看
- VacuumDelay:vacuum 延迟
- BackupWaitWalArchive:等待归档
- RecoveryPause:recovery暂停
- RecoveryConflictSnapshot
- RecoveryConflictTablespace
流复制和恢复相关
- primary_conninfo和- primary_slot_name这两个参数,可以通过reload的方式更改,不再需要重启
- 如果没有指定永久复制槽,PG会使用临时复制槽,但是需要设置wal_receiver_create_temp_slot参数
- 追加max_slot_wal_keep_size参数,控制复制槽最多保留多少WAL。如果超过这个阈值,复制槽会失效,默认是-1
- 备库提升为主的时候如果未到预期的目标点,会报错,以前是会恢复到WAL的最新点就结束(有多少WAL就恢复多少)
SQL
- vacuum支持并行处理索引
- 对分区表做lock table,不再检查子表的权限
- 支持alter table将生成列变为普通列
- alter view语法修改视图的列名,以前是通过- alter table rename column的方式改,比较迷惑的一个语法
数据类型
追加了一个xid8的SQL数据类型,用于表达完整的事务号,即64位事务号。但是!数据库内部依旧是用xid来表示事务号的。。。
函数
- 支持对pg_lsn做min()和max()聚合操作
- 追加了gen_random_uuid()函数用于生成version-4 UUIDs
- 事务号相关的函数,支持xid8类型,也兼容以前的xid
- 支持将extension内的一些对象(函数,物化视图,索引和触发器)和extension本身之间的依赖关系解除,通过ALTER .. NO DEPENDS ON
服务端命令
- 追加pg_verifybackup命令,用于验证备份集
- vacuumdb命令可以并行,指定- --parallel选项
- reindexdb命令可以并行,指定- --jobs选项
 
                         
                                

