我从一个使用者的角度,简单罗列了一下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
选项