postgresql 14新特性整理

       本文整理一些工作中可能会用到的PostgreSQL 14新特性,有删减,完整版请参考官方文档PostgreSQL: Documentation: 14: E.7. Release 14

一、 Server

  • 新增预定义角色 pg_read_all_data 和 pg_write_all_data,授予 所有 tables, views, sequences的读、写权限
  • 新增预定义角色pg_database_owner ,包含当前db的owner权限,在临时数据库中特别有用

PostgreSQL: Documentation: 14: 22.5. Predefined Roles

  • 后台进程崩溃后,删除相关临时文件。之前版本会保留这些文件用于debug,可由remove_temp_files_after_crash参数控制
  • 如果客户端断开连接,允许长时间运行的SQL被取消(Allow long-running queries to be canceled if the client disconnects),由client_connection_check_interval参数控制
  • pg_terminate_backend()函数新增了可选的超时参数
  • 允许宽元组(wide tuples)总是被加入到近乎为空的heap page。在之前的版本,超出页的fill factor参数后,元组会被插入到新页

1. Vacuum

  • 当索引中可清理的entries非常少,vacuum可以跳过这些index提高速度,该功能由INDEX_CLEANUP参数控制
  • 允许vacuum更迫切地将被删除的btree page加入fsm文件,之前版本只能将被上次vacuum标记为deleted的页加入fsm文件(14版本则是本次vacuum标记的也可以)。
  • 允许vacuum回收无用的尾部堆指针(trailing heap line pointers)
  • 允许vacuum在CREATE INDEX CONCURRENTLY,REINDEX CONCURRENTLY等minimal-locking index操作时清理死元组
  • 加速对有非常多表的db的vacuum操作
  • 减小vacuum_cost_page_miss的默认值,以更好地反应当前硬件能力
  • 新增跳过vacuum TOAST 表的能力,VACUUM新增了PROCESS_TOAST选项,而vacuumdb新增了--no-process-toast选项
  • COPY FREEZE可以在导入数据时相应更新页的可见性bit
  • Vacuum操作在表的xid或multixact 接近回卷时会更激进,由vacuum_failsafe_age和vacuum_multixact_failsafe_age参数控制
  • 增加了xid或multixact 接近回卷时的告警时间
  • 在autovacuum logging output中增加了每个索引(per-index)信息

2. 分区

  • 提升了具有大量分区的分区表的update和delete性能
  • 可以在线进行detach操作 ALTER TABLE ... DETACH PARTITION ... CONCURRENTLY, and FINALIZE
  • 分区边界值忽略COLLATE子句

3. 索引

  • btree索引可以删除过期的index entries,避免页分裂,防止频繁更新的索引快速膨胀
  • BRIN索引(Block Range Index)可以在每个range记录多个 min/max values 
  • PostgreSQL黑科技BRIN索引 - 墨天轮
  • BRIN索引可以使用bloom filters 
  • GiST索引可以在创建过程中预排序数据
  • SP-GiST索引可以使用include子句包含列

4. 优化器

  • in子句包含大量常量时,可以用hash查找(以前只能顺序扫描值列表)
  • or子句、表达式也可以使用扩展统计信息,可以查询pg_stats_ext_exprs视图
  • 更高效的TIDs堆范围扫描
  • 修复EXPLAIN CREATE TABLE AS 和 EXPLAIN CREATE MATERIALIZED VIEW的问题,之前如果对象已存在,则会报错

5. 通用性能

  • 提升了系统在有大量CPU和高连接数时计算MVCC可见性快照的速度,也提升了有大量空闲会话时的性能
  • 新增执行器方法以记录nested-loop join内侧的结果集(如果内侧结果集小效果会更好),由enable_memoize参数配置是否启用
  • 允许窗口函数使用增量排序
  • 提升了并行顺序扫描的IO性能
  • 允许查询引用多个外部表,以实现外部表并行扫描,postgres_fdw需要设置async_capable参数
  • 允许analyze命令做page prefetching ,由maintenance_io_concurrency参数控制
  • 提升正则表达式查询性能
  • 极大提升了Unicode normalization性能
  • TOAST 数据新增了LZ4压缩算法,编译pg时必须指定--with-lz4

6. 监控

  • 如果设置了compute_query_id参数,将在pg_stat_activity, EXPLAIN VERBOSE, csvlog, log_line_prefix中展示查询id  PostgreSQL 14数据库监控和日志功能的加强 - abce - 博客园
  • 如果设置了track_io_timing参数,将在 auto-vacuum 和auto-analyze 中记录IO时间,并在auto-analyze 中记录buffer read和脏读占比
  • 在log_connections输出中增加客户端原始用户名

7. 系统视图

  • pg_locks 视图新增锁等待开始时间 waitstart
  • pg_stat_activity视图可以看到归档进程信息
  • 新增等待事件WalReceiverExit,表示WAL receiver退出的等待时间

8. 验证连接

  • pg_hba.conf 和pg_ident.conf记录可以跨多行
  • 密码允许使用任意长度

9. 参数设置

  • 新增idle_session_timeout参数关闭空闲连接,跟idle_in_transaction_session_timeout的区别是会话不需要开启事务,只判断空闲超时
  • checkpoint_completion_target 默认值调整为 0.9,之前是0.5
  • log_line_prefix可以使用%P,表示parallel group leader's PID
  • 新增huge_page_size参数,控制Linux大页使用的size

二、 流复制与恢复

1. 逻辑复制

目前没有用到过这块,略

2. SELECT,INSERT

  • 减少不使用AS则不能用作列标签的关键字数量(减少了90%)
  • 允许为JOIN的USING子句指定别名(在USING后使用AS指定)
  • 允许将DISTINCT添加到GROUP BY删除重复的GROUPING SET组合,例如 GROUP BY CUBE (a,b), CUBE (b,c),如果不使用DISTINCT将会有重复数据
  • 正确处理INSERT多行VALUES时的DEFAULT值,过去常常报错
  • 为CTE添加SQL标准 SEARCH和CYCLE子句
  • WHERE允许子句中的列名ON CONFLICT是表限定的,但是只能引用目标表

3. 命令使用

4. 数据类型

5. 函数

三、 客户端与服务端工具

1. 客户端应用

  • vacuumdb新增--no-index-cleanup 和--no-truncate选项,支持跳过索引清理和truncate
  • pg_dump新增—extension选项,导出特定插件
  • pg_dumppg_dumpallpg_restore新增 –v选项,输出详细过程
  • psql使用\df和\do可以查看特定函数参数类型
  • psql使用\dt和\di可以查看TOAST 表和索引类型
  • psql使用\dX可以查看扩展统计信息对象

2. 服务端

  • 新增命令行工具pg_amcheck 用于检查数据损坏,简化在大量表上运行contrib/amcheck的操作。另外amcheck插件之前只能检查B-Tree索引页,pg 14中支持了检查heap pages 
  • pg_upgrade 删除了analyze_new_cluster 脚本,在vacuumdb有类似的操作
  • postmaster 删除了-o选项

四、 过时参数和特性

  • 删除参数 vacuum_cleanup_index_scale_factor,该参数设置从13.3版本开始被忽略
  • 删除参数 operator_precedence_warning ,该参数设置从9.5版本开始会有警告

tsearch2 compatibility wrapper 是个插件

参考:

PostgreSQL: Documentation: 14: E.7. Release 14

PostgreSQL: Feature Matrix

https://cloud.tencent.com/developer/article/1940899

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值