开源云原生数据库PolarDB PostgreSQL 15兼容版本正式发布

开源云原生数据库PolarDB PostgreSQL 15兼容版正式发布上线,该版本100%兼容开源PostgreSQL 15。PolarDB是阿里云自研云原生关系型数据库,基于共享存储的存算分离架构使其具备灵活弹性和高性价比的特性,在开源PostgreSQL很好的性能表现的基础上极大增强了可扩展性和弹性。

PolarDB for PostgreSQL 架构

PolarDB采用云原生架构,相较于传统架构,其两大突破性改革为:存储计算分离、基于共享存储的一写多读。存储计算分离架构解决了传统架构的2大弊端:单机存储容量限制和弹性升降配需要迁移数据。得益于共享存储的设计,存储成本大幅降低的同时,减少多副本复制延迟和回放成本,从而可以进行高效的读能力扩展。PolarDB架构如下图所示:

PolarDB云原生架构具有以下优势:

  • 高扩展性:支持一写多读,最高可扩展到16个计算节点(1写15读),存储计算分离,分钟级加减节点;

  • 高可用性:毫秒级延迟,秒级切换,支持跨AZ高可用;

  • 更低成本:多个计算节点共享一份数据,大幅降低存储成本;

  • 混合负载:支持多节点并行查询,随着计算资源的增加,性能可以线性提升,相较于单机平均加速23倍,可以支持HTAP混合负载。

PolarDB进行了深度的内核优化,从而实现以更低的成本提供商业数据库的性能。主要技术包括:自研的分布式文件系统支持共享存储,日志索引LogIndex技术加速只读节点回放,Online Promote技术实现秒级切换,Persistant BufferPool、Direct IO等实现共享存储架构下的数据一致性和低复制延迟。同时PolarDB进行了深入的性能优化,例如优化 SIMD 指令集和原子操作指令集的使用,在事务处理等模块中加速高并发场景性能,支持批量读取、扩展数据页面,优化 IO 性能,并进行了深入的参数调优,提供了极致性能。此外,在首个发布版本中还支持GBK/GB18030 字符集,以及以下插件:hll、hypopg、log_fdw、pase、pg_bigm、pg_cron、pg_jieba、pg_repack、pg_similarity、pgtap、pgvector、pldebugger、prefix、roaringbitmap、rum、varbitx、zhparser。

PostgreSQL 15关键提升

相较于之前版本,PostgreSQL 15版本发布侧重于性能提升,在管理本地和分布式部署中的工作负载方面成效显著,对逻辑复制进行了多项改进,提高了排序性能。该版本增强了 SQL 功能,引入了MERGE命令;大幅改进了逻辑复制功能,例如支持复制 2PC 事务,发布内容可以使用 WHERE 进行过滤,一次性发布 schema 下所有的表;优化了数据库性能,例如更快的内存排序和基于磁盘的排序,内存占用降低,崩溃恢复加速等。

PostgreSQL核心组成员Jonathan Katz表示:"PostgreSQL开发者社区持续构建那些改善开发人员体验,并简化那些支持高性能数据工作负载的功能, PostgreSQL 15 展示了如何通过开放式软件开发,为我们的用户提供一个非常适合应用程序开发并保证其关键数据安全的数据库。"

PostgreSQL 是一个创新的数据管理系统,以其可靠性和健壮性著称,得益于全球开发者社区 超过25年的开源开发,它已成为各种规模组织首选的开源关系型数据库。

排序及压缩性能提升

在这个最新版本中,PostgreSQL 改进了其内存和磁盘排序 算法,基准测试显示,在对不同数据类型的排序时,速度可提高25%到400%不等 。使用 row_number()rank()dense_rank()count() 作为窗口函数 在 PostgreSQL 15 中也有性能上的优化。使用 SELECT DISTINCT 的查询现在可以并行执行

基于之前PostgreSQL版本 的异步远程查询功能,PostgreSQL外部数据包装器postgres_fdw ,现在可支持异步提交

PostgreSQL 15 的性能改进也扩展到了归档和备份工具。 PostgreSQL 15 增加了对 预写日志(WAL) 文件 LZ4和Zstandard (zstd)的压缩支持,这可以在一定的工作负载下获得空间和性能上的改进。在一些操作系统上,PostgreSQL 15 增加了对WAL页面的预载支持 以帮助加快恢复时间。 PostgreSQL内置备份命令pg_basebackup ,现在支持服务器端的备份文件压缩,可以选择gzip、LZ4和zstd格式。 PostgreSQL 15 包含了使用自定义模块进行归档 的能力,从而减少了使用 shell 命令的开销。

开发人员特色功能

PostgreSQL 15 包含 SQL 标准的 MERGE 命令。MERGE允许用户编写包含 INSERTUPDATEDELETE操作的SQL语句。

最新版本增加了使用正则表达式的新函数 来检查字符串: regexp_count(), regexp_instr(), regexp_like(),和 regexp_substr()。 PostgreSQL 15还扩展了 range_agg 函数来聚合上一个版本 引入的 multirange 数据类型

PostgreSQL 15 允许用户使用访客权限而不是视图创建者权限创建视图 。这个选项被称为 security_invoker,它增加了一层额外的保护,以确保视图调用者使用正确权限处理底层数据。

更多逻辑复制选项

PostgreSQL 15 为管理逻辑复制 提供了更多的灵活性。这个版本为Publishers引入了行筛选数据列列表 来允许用户选择从表中复制数据的子集。PostgreSQL 15 增加了一些功能来简化冲突管理 ,包括跳过重新执行冲突事务的能力,以及在检测到错误时自动停止订阅的能力。该版本还支持在逻辑复制中使用两阶段提交(2PC)。

日志和配置增强

PostgreSQL 15 引入了一种新的日志格式:jsonlog 。 这种新格式使用JSON结构输出日志数据,这允许在结构化日志系统中处理PostgreSQL日志。

该版本在管理PostgreSQL配置方面为数据库管理员提供了更大的灵活性,增加了授予用户更改服务器级配置参数的权限的能力。此外,用户现在可以使用psql 命令行工具中的\dconfig命令搜索有关配置的信息。

其他值得关注的改动

PostgreSQL服务器级的统计数据现在收集到共享内存,去除了统计收集进程以及定期将这些数据写入磁盘的过程。

PostgreSQL 15 使ICU 排序 作为集群或单个数据库的默认排序规则成为可能。

该版本还增加了一个新的内置扩展pg_walinspect ,它允许用户直接从SQL接口检查预写日志文件的内容。

PostgreSQL 15 还允许除数据库所有者之外,从 public (或default)模式的数据库中 撤销所有用户的CREATE权限

PostgreSQL 15 删除了长期被弃用的"独占备份"模式,也删除了PL/Python中对Python 2的支持。

关于社区的详细发布信息,请参考社区公告:PostgreSQL: Documentation: 15: E.9. Release 15

升级指导

在PolarDB PostgreSQL 14 版本升级到PostgreSQL 15 版本的过程中,大部分的数据类型、内置函数、表列和对象都没有发生显著变化,大多数变化属于细节改进。通过逻辑复制等方式可以实现接近100%的兼容性,而具体的变化细节如下所示。

类型

禁止零长度Unicode 标识符,例如U&""。

防止数字文本有非数字结尾的字符,例如 123abc 会被解析为 123。

调整JSON数字文本处理方式,以匹配SQL / JSON标准。现在可以接受 1.和.1 输入了,同时不接受非数字结尾,例如1.type()。

当interval输入的单位分数值大于月份时,四舍五入到最接近的月份,例如 1.99 year 转换到 2years,而非过去的 1 year 11 months。

提高interval与尾随句点解析的一致性。

"char":更改非 ASCII 字符的输入输出格式,将会以八进制展示。

函数与表达式

array_to_tsvector():如果传入一个空字符串数组元素,将会产生错误。

chr():当提供负参数时,将会产生错误。

将输出类型为 interval 的函数标记为 stable,而非 immutable,因为它依赖于IntervalStyle。

检查调整时间间隔函数中的整数溢出,这会影响justify_interval(), justify_hours(), and justify_days()函数。

改进计算算法random():即使种子值相同,这也会导致random()的结果与之前版本的结果不同。

查询优化

将hash_mem_multiplier默认值增加到 2.0,这会导致查询哈希操作比其他操作使用更多的 work_mem 内存。

防止CREATE OR REPLACE VIEW改变输出列的排序规则。

权限

删除登录角色的对自身默认的 ADMIN OPTION 权限。过去登录角色可以添加/删除其自身角色的成员,即使没有ADMIN OPTION 权限。

允许逻辑复制作为订阅的所有者运行 。

阻止对订阅所有者没有 SELECT 权限的表进行逻辑复制操作 (UPDATE DELETE)。

其他

删除排他备份及相关函数。

删除对 python2 的支持。

删除 xml_is_well_formed 函数。

libpq的PQsendQuery()函数不再支持管道模式,可能会导致部分应用程序或者驱动不兼容。

删除过时的 DB 参数 stats_temp_directory。

当EXPLAIN引用会话临时对象的 schema 时,将其称为pg_temp,过去 schema 名称也会被包含在内。

了解更多

开源云原生数据库PolarDB社区:PolarDB_云原生数据库_自研数据库_数据库-阿里云

PolarDB for PostgreSQL开源代码仓库:https://github.com/ApsaraDB/PolarDB-for-PostgreSQL

云原生数据库 PolarDB PostgreSQL 商业版:云原生数据库 PolarDB PostgreSQL 版_PostgreSQL_Oracle_数据库-阿里云

相关推荐
kejijianwen2 小时前
JdbcTemplate常用方法一览AG网页参数绑定与数据寻址实操
服务器·数据库·oracle
编程零零七2 小时前
Python数据分析工具(三):pymssql的用法
开发语言·前端·数据库·python·oracle·数据分析·pymssql
铁匠匠匠5 小时前
从零开始学数据结构系列之第六章《排序简介》
c语言·数据结构·经验分享·笔记·学习·开源·课程设计
高兴就好(石5 小时前
DB-GPT部署和试用
数据库·gpt
这孩子叫逆5 小时前
6. 什么是MySQL的事务?如何在Java中使用Connection接口管理事务?
数据库·mysql
Karoku0666 小时前
【网站架构部署与优化】web服务与http协议
linux·运维·服务器·数据库·http·架构
码农郁郁久居人下6 小时前
Redis的配置与优化
数据库·redis·缓存
MuseLss7 小时前
Mycat搭建分库分表
数据库·mycat
Hsu_kk7 小时前
Redis 主从复制配置教程
数据库·redis·缓存
DieSnowK8 小时前
[Redis][环境配置]详细讲解
数据库·redis·分布式·缓存·环境配置·新手向·详细讲解