PostgreSQL 17 正式发布, 要不要升?
参考文档点击文末阅读原文打开; 推荐《最好的PostgreSQL学习镜像》;
PostgreSQL 17 正式发布, 到底值不值得期待?
PostgreSQL 17如约而至, 每年1个大版本, 每个大版本都是LTS版, 5年的bugfix窗口期, PG始终如一! 经常有人问我用什么PG版本比较好, 如果不急于使用最新大版本的高级功能, 可以考虑使用上一个大版本(也就是去年发的大版本)的最新小版本, 比如现在16.4! 因为周边的生态软件和插件也要去花时间适配,如果没有其他依赖的话其实大版本发完2个小版本后上生产也妥妥的.
背景
PostgreSQL 17 9.26 正式发布了, 到底值不值得期待? 看完这篇就明白了.
详见: https://www.postgresql.org/docs/17/release-17.html
由于保持了跟踪git.postgresql.org
的习惯, 我在github里已经持续发表了PostgreSQL dev版本的新特性. 有兴趣的朋友可以关注github: https://github.com/digoal/blog/
这篇信息主要整理自之前发布的内容, PostgreSQL 17新增特性如下, 划线部分是我认为值得期待的:
1、pg_basebackup支持块级别增量备份与恢复(通过pg_combinebackup重构): 对于特别大的库非常棒, 数据文件的备份终于不需要每次都全拷贝了, 可以只备份上次备份以来修改过的数据块.
2、支持逻辑复制failover、switchover: 16支持了standby开启逻辑复制功能, 17的增强是在基于流复制的HA解决方案中支持了逻辑复制的failover(而且是0丢失的). 同时17开始pg_upgrade大版本升级可以保留逻辑复制槽了.
3、支持COPY错误处理: 以前COPY遇到异常的行会报错退出, 现在支持了skip error row. 不过还有记录error row, 支持也是早晚的事.
4、JSON类型处理能力增强: 主要增强了jsonpath的功能, 总之使用PG处理JSON是很顺手的.
5、vacuum性能改进: 引入TidStore数据结构, 打破存储dead tupleids的上限(只要内存足够, 索引再也不需要被多次扫描), 相比以往能节省20倍内存消耗, 并且大幅度提升vacuum了效率.
6、index 性能优化: 支持并行创建brin索引; gist/sp-gist索引支持增量排序场景; btree倒序增强等.
7、高并发锁竞争优化: 通过一系列wal锁优化, 提升高并发写入性能, 可提升2倍性能.
8、性能优化: 批量导入性能提升; merge append提升union性能; 通过增量排序提升group by性能; 减少分区表partitionwise join内存消耗; postgres_fdw 支持semi-join pushdown等; simd指令集支持了更多的用户函数支持, 使得大批量计算的性能更好.
9、新增GUC参数: 新增了一系列的GUC参数提升数据库管理灵活性.
10、SQL语法、函数功能增强: 分区表分裂与合并、merge语法、生成列、exclude约束等功能增强.
11、管理手段增强: 支持login 事件、新增维护角色、读写分离一致性函数支持、事务超时等.
12、内部统计信息、系统视图增强: 新增等待事件视图、增强检查点统计信息、增强并行操作统计信息、增强范围类型的统计信息维度、增强standby统计信息、增强io统计信息
13、table access method 接口增强: 新增了自定义Option的接口, undo回滚段am可能快来了. 被Tom lane老师打回了, 开不开心? 但是在tom lane 老师crunchydata的产品中确在大量使用bridgh的产品(依赖am option的接口等).
14、扩展接口能力增强: 新增钩子、支持自定义等待事件、新增自定义注入点、支持DSM注册等.
15、wire protocol、libpq协议增强: 继续加强吧, 希望国产数据库厂商开发兼容mysql、sqlserver等协议更容易.
看完是不是有点失落? 为什么xid64、undo回滚段、TDE等万众期待的功能还是没有等来. 但17依旧是值得期待的版本, 毕竟块级增量备份和恢复、逻辑复制failover、垃圾回收性能改进(一定程度缓解了xid wrapped问题)、高并发性能提升都是不错的. 另外AM接口不断增强, 估计undo回滚段管理未来的版本也快来了.
整理好的详细文档
以下文章全部是链接, 如果公众号打不开, 请点击阅读原文, 打开github.
PS: 由于以下文章整理自PG 17 GA之前, 中间可能出现了少量特性被打回的情况, 最终以GA后的release notes为准, 之前某个版本TDE就被打回了. 我就在4.12日看, 已经有大量AM的增强被打回了.
支持块级别增量备份与恢复:
《PostgreSQL 17 preview - 内置块级别物理增量备份(INCREMENTAL backup/pg_combinebackup)功能》 《PostgreSQL 17 preview - Add new pg_walsummary tool》 《PostgreSQL 17 preview - Add new function pg_get_wal_summarizer_state()
分析为聚合入 pg_wal/summaries 的pid内存中的wal片段信息》《PostgreSQL 17 preview - 增量备份patch: Add the system identifier to backup manifests》
支持逻辑复制failover、switchover:
《PostgreSQL 17 preview - pg_upgrade大版本升级支持保留逻辑订阅全部信息 (preserve the full subscription's state)》 《PostgreSQL 17 preview - 主库视图 pg_replication_slots
.conflict_reason
支持逻辑复制冲突原因跟踪》《PostgreSQL 17 preview - 支持逻辑复制槽failover to 流复制standby节点. pg_create_logical_replication_slot(... failover = true|false ...)
》《PostgreSQL 17 preview - preparation for replicating unflushed WAL data》 《PostgreSQL 17 preview - sync logical replication slot LSN, Failover & Switchover》 《PostgreSQL 17 preview - Add a new slot sync worker to synchronize logical slots》 《PostgreSQL 17 preview - 增加GUC standby_slot_names , 保证这些standby已接收并flush所有逻辑slot向下游发送逻辑数据对应的WAL》 《PostgreSQL 17 preview - pg_createsubscriber支持将物理从库转换为逻辑从库》 《PostgreSQL 17 preview - 跟踪slot断联时间戳 pg_replication_slots.inactive_since
》
支持COPY错误处理:
《PostgreSQL 17 preview - Add new COPY option SAVE_ERROR_TO (copy跳过错误行)》 《PostgreSQL 17 preview - pg_stat_progress_copy Add progress reporting of skipped tuples during COPY FROM》 《PostgreSQL 17 preview - COPY LOG_VERBOSITY notice ERROR信息》
JSON类型处理能力增强:
《PostgreSQL 17 preview - Implement various jsonpath methods》 《PostgreSQL 17 preview - JSON_TABLE: Add support for NESTED paths and columns》
vacuum性能改进:
《PostgreSQL 17 preview - 增加index vacuum 进度打印》 《PostgreSQL 17 preview - Optimize vacuuming of relations with no indexes 降低wal产出》 《PostgreSQL 17 preview - 解除vacuumdb,clusterdb,reindexdb的某些options组合限制》 《PostgreSQL 17 preview - 使用TidStore数据结构存储dead tupleids, 提升vacuum效率, 为什么PG单表不建议超过8.9亿条记录?》 《PostgreSQL 17 preview - vacuum_buffer_usage_limit调大默认值, 减少vacuum造成的wal flush, 提升vacuum速度》
index 性能优化:
《PostgreSQL 17 preview - Allow Incremental Sorts on GiST and SP-GiST indexes》 《PostgreSQL 17 preview - btree index backward scan (order by desc 场景)优化》 《PostgreSQL 17 preview - Allow parallel CREATE INDEX for BRIN indexes》
高并发锁竞争优化:
《PostgreSQL 17 preview - 优化wal insert lock, 提升高并发写入吞吐性能》 《PostgreSQL 17 preview - Reduce rate of walwriter wakeups due to async commits》 《PostgreSQL 17 preview - WAL锁竞争优化 - reading WAL buffer contents without a lock, Additional write barrier in AdvanceXLInsertBuffer()》
性能优化:
《PostgreSQL 17 preview - 函数parser阶段优化, 函数guc into lists避免parser》 《PostgreSQL 17 preview - 删除snapshot too old特性, 将引入新实现方式》 《PostgreSQL 17 preview - postgres_fdw 支持semi-join pushdown (exists (...))》 《PostgreSQL 17 preview - 将unstable hashfunc剥离, 提升in-memory场景哈希计算性能和算法自由度》 《PostgreSQL 17 preview - 优化器增强, group by支持Incremental Sort, GUC: enable_group_by_reordering》 《PostgreSQL 17 preview - 引入新的smgr, 优化bulk loading》 《PostgreSQL 17 preview - Add --copy-file-range
option topg_upgrade
》《PostgreSQL 17 preview - 减少分区表partitionwise join内存消耗》 《PostgreSQL 17 preview - 使用 Merge Append 提升 UNION 性能》 《PostgreSQL 17 preview - pg_restore --transaction-size=N
支持N个对象封装为一个事务提交》
新增GUC参数:
《PostgreSQL 17 preview - Add GUC: event_triggers . for temporarily disabling event triggers》 《PostgreSQL 17 preview - Allow ALTER SYSTEM to set unrecognized custom GUCs.》 《PostgreSQL 17 preview - XX000 内部错误 backtrace, add GUC backtrace_on_internal_error》 《PostgreSQL 17 preview - allow_alter_system GUC控制 是否允许 alter system
修改postgresql.auto.conf
》《PostgreSQL 17 preview - 新增 GUC: or_to_any_transform_limit 控制 OR to ANY
转换》《PostgreSQL 17 preview - 新增 GUC trace_connection_negotiation : 跟踪客户端 SSLRequest or GSSENCRequest packet》
SQL语法、函数功能增强:
《PostgreSQL 17 preview - plpgsql 支持定义 %TYPE
%ROWTYPE
数组变量类型》《PostgreSQL 17 preview - 支持修改生成列表达式 alter table ... ALTER COLUMN ... SET EXPRESSION AS (express)
》《PostgreSQL 17 preview - Support identity columns in partitioned tables》 《PostgreSQL 17 preview - 简化exclude约束用法, 对primary key,unique约束增加without overlaps可选项》 《PostgreSQL 17 preview - Add RETURNING support to MERGE》 《PostgreSQL 17 preview - 增加uuid功能函数: 提取UUID值里面的时间戳 和 生成UUID值的函数版本》 《PostgreSQL 17 preview - 新增返回某个范围内的随机数的随机函数 random(min, max)
》《PostgreSQL 17 preview - Add support for MERGE ... WHEN NOT MATCHED BY SOURCE
》《PostgreSQL 17 preview - 使用pg_basetype 获得domain类型的基础类型》 《PostgreSQL 17 preview - Implement ALTER TABLE ... MERGE|SPLIT PARTITION
... command》
管理手段增强:
《PostgreSQL 17 preview - 内置支持login event trigger》 《PostgreSQL 17 preview - Add tests for XID wraparound》 《PostgreSQL 17 preview - pgbench工具新增meta语法syncpipeline, pgbench: Add \syncpipeline
》《PostgreSQL 17 preview - 引入MAINTAIN权限及pg_maintain预制角色》 《PostgreSQL 17 preview - 新增 "builtin" collation provider》 《PostgreSQL 17 preview - 通过pg_wal_replay_wait()支持读写分离pool实现跨实例的读写一致性》 《PostgreSQL 17 preview - transaction_timeout》
内部统计信息、系统视图增强:
《PostgreSQL 17 preview - Add new parallel message type to progress reporting.》 《PostgreSQL 17 preview - Add system view pg_wait_events》 《PostgreSQL 17 preview - Add JIT deform_counter》 《PostgreSQL 17 preview - 添加checkpoint delay等待事件》 《PostgreSQL 17 preview - Add local_blk_{read|write}_time
I/O timing statistics for local blocks》《PostgreSQL 17 preview - Introduce pg_stat_checkpointer》 《PostgreSQL 17 preview - improve range type pg_stats》 《PostgreSQL 17 preview - 增强standby节点检查点统计信息》 《PostgreSQL 17 preview - Add EXPLAIN (MEMORY) to report planner memory consumption》
table access method 接口增强:
《PostgreSQL 17 preview - Add support for DEFAULT
inALTER TABLE .. SET ACCESS METHOD
》《PostgreSQL 17 preview - 支持修改分区表access method》 《PostgreSQL 17 preview - 寻找undo-based table access methods的蛛丝马迹》 《PostgreSQL 17 preview - 频繁提交table access method相关patch, undo-based table access methods真的快来了吗?》 《PostgreSQL 17 preview - table AM增强: Custom reloptions for table AM》
扩展接口能力增强:
《PostgreSQL 17 preview - 增加alter table部分属性hook, 未来可定制化审计功能》 《PostgreSQL 17 preview - 支持自定义等待事件》 《PostgreSQL 17 preview - Introduce the dynamic shared memory registry (DSM 注册器)》 《PostgreSQL 17 preview - 新增代码注入功能(enable-injection-points), 类似hook.》 《PostgreSQL 17 preview - 引入读写原子操作函数接口with full barrier semantics》 《PostgreSQL 17 preview - 支持在申请时指定动态共享内存区域初始、最大段size》 《PostgreSQL 17 preview - 代码注入(injection_points)功能增强, Introduce runtime conditions》
libpq协议增强:
《PostgreSQL 17 preview - libpq: Add support for Close on portals and statements , 释放绑定变量语句入口(prepared statements)》 《PostgreSQL 17 preview - 增加wire protocol头文件》 《PostgreSQL 17 preview - libpq新增 PQchangePassword()
接口, 防止alter user修改密码时明文被记录在SQL活跃会话、log、pg_stat_statements中》
本期彩蛋 - 数据库生态工具&信创开源数据库
用好周边工具, 数据库管理水平战胜90%老司机
1、管控软件
云猿生开源的kubeblocks, 如果你要管理很多套并且种类很多的数据库产品, 推荐选择.
https://github.com/apecloud/kubeblocks
乘数开源的clup, 专门用来管理PostgreSQL和PolarDB的集群管理软件, 如果你要管理很多套数据库, 推荐选择. 并且clup还提供了企业版、自研的连接池、分布式存储、一体机、备份平台等, 企业可以关注一下.
https://www.csudata.com/
若航开源的pigsty, 集成了300多个PG插件的PG集群和PolarDB集群管理软件, 如果你要管理很多套数据库, 并且对插件有特别多的需求, 推荐选择.
https://pigsty.cc/zh/
2、审计监控诊断优化
海信聚好看的 DBdoctor, 采用ebpf技术, 在对数据库几乎没有影响的情况下实时监控数据库和服务器的各项指标, 发现和诊断问题根因非常方便.
https://www.dbdoctor.cn/
Bytebase 的目标非常远大, 是位于您和数据库之间的中间件。它是数据库 DevOps 的 GitLab/GitHub,专为开发人员、DBA 和平台工程师打造。
https://bytebase.cc/docs/introduction/what-is-bytebase/
D-Smart, Oracle老前辈白老大他们搞的, 专注企业级市场, 将业界顶级DBA经验的产品化作品, 产品功能包括数据库监控、诊断、优化等.
https://www.modb.pro/db/567140
3、数据同步&迁移&备份恢复
NineData, 老领导出去创业做的产品, 产品涵盖了数据同步、迁移、备份、比对、devops、chatDBA等.
https://www.ninedata.cloud/home
DSG, 非常老牌的数据库同步迁移企业级产品, 支持各种数据库的异构和同构迁移, 用他们的话说, 没有dsg搞不定的迁移, 比goldengate还牛.
https://www.dsgdata.com/
通过信创并且开源的数据库:
PolarDB for PostgreSQL
https://github.com/ApsaraDB/PolarDB-for-PostgreSQL
以下PG系国产数据库也非常值得关注: HaloDB(基于PG兼容PostgreSQL、Oracle、MySQL. http://www.halodbtech.com/ )、IvorySQL(基于开源PG兼容PG、Oracle. https://www.ivorysql.org/zh-cn/ )、ProtonBase(云原生分布式数仓. https://protonbase.com/ ).
参考文档点击阅读原文获得
感谢关注我的github (https://github.com/digoal/blog) 及视频号:
彩蛋2: 全国大学生数据库创新设计赛 点击报名