场景及优势
PostgreSQL 不断在提供新版本给客户使用,新版本会引入更多的特性、更好的性能和更高的稳定性和安全性,因此建议您基于业务需要来合理规划,尽早升级数据库大版本。云数据库 PostgreSQL 支持数据库大版本升级,该工具有如下优势:
支持 PostgreSQL 9~17之间的跨版本升级。支持升级前演练。
在原实例上拉取只读实例进行升级操作,原实例不受任何影响。
升级流程对会有只读影响,只读时间取决于原实例对象数量,与数据规模无关。
另外,统计信息收集期间实例也会只读,只读时间取决于数据量大小。
原实例升级完成后,连接地址、标签、监控、备份集等信息完整保留。
说明:
强烈建议您在大版本升级之前发起演练,以便更清晰的评估出实例只读时间。
暂不支持对开启数据透明加密实例进行大版本升级。
操作步骤
正式大版本升级
1. 登录 PostgreSQL 控制台,在实例列表,单击实例 ID 或操作列的管理,进入实例详情页面。
2. 单击版本升级,进入版本升级操作页面。
3. 单击升级大版本,进入版本升级页面。
3.1 目标版本
当前系统会返回可以升级的所有版本供用户选择,每个大版本会返回一个最新的版本号。
3.2 升级时间
当升级完成还不到指定时间或者维护时间窗口时,实例的状态为等待切换,您可以在控制台实例列表 > 操作 > 立即切换来完成升级流程。
3.3 统计信息搜集说明
准确的统计信息可确保 PostgreSQL 查询规划器以最优方式处理查询。缺少统计信息可能会导致查询计划错误,进而可能会降低性能并占用过多内存。该操作,主要是对主实例运行 ANALYZE 并在升级后更新系统统计信息。统计信息生成时长取决于实例数据量大小。统计信息生成时实例会只读。
3.4 插件升级设置
该操作主要是在升级完成后在创建过插件的数据库上执行"ALTER EXTENSION UPDATE"。有三个选项:
升级完成前之前升级插件: 由于需要检查所有的数据库的插件列表并升级到对应的版本,执行时间跟数据库的数量和插件数量正相关,会延长整个大版本升级的执行时间,请您评估后选择。
升级完成后升级插件:升级完成后,立即恢复读写。用户需要评估插件升级完成前对业务是否有影响。
不升级插件版本:升级完成后,立即恢复读写。用户自己对插件进行升级,需要评估插件升级完成前对业务是否有影响。
3.5 升级开始前是否备份
执行大版本升级时,为保证数据可恢复性,系统默认会自动进行两次备份,备份类型为升级备份:
升级开始前会进行一次全量备份,在开始升级之前立即进行。用户可以使用此备份将数据库实例恢复为先前版本的状态。
升级完成后进行一次全量备份,该备份在允许对升级后的数据库实例执行新写入后立即创建。
升级前备份支持选项:
否:当实例已有备份可以恢复到升级前的状态时,可选择此选项,否则不建议选择。
是:默认选项。备份商业化后可能会产生费用,具体请参考 备份空间收费说明,用户可以在升级验证完成后选择将其删除。此备份文件的删除策略也受用户设置的备份集保留规则管理。如果您想延长备份集保留时间,请参考下图:
3.6 任务启动设置
只检查不发起任务:只进行升级前的检查,包含实例运行状态、实例参数设置合法性、数据库连接检查等,但不发起任务。用户可以通过该操作来预检查升级可行性。
检查并发起任务:进行升级前的检查,包含实例运行状态、实例参数设置合法性、数据库连接检查等。如果检查通过则直接发起任务。
4. 单击提交会产生一个升级任务,实例的状态为内核版本升级中,用户可以在任务列表来查看任务状态和系统日志。
演练升级
为了保证升级的成功率,业务可以选择先演练升级。演练升级是基于当前实例的备份集先克隆出新实例,在新实例上进行升级,升级完成后产生新实例,用户可以选择直接使用该实例,也可以删除实例。克隆产生实例会正常计费,计费模式为按量计费,具体价格请参考 产品价格。具体操作如下:
1. 登录 PostgreSQL 控制台,在实例列表,单击实例 ID 或操作列的管理,进入实例详情页面。
2. 点击版本升级,进入版本升级操作页面。
3. 点击大版本升级演练,进入演练操作界面。
3.1 克隆实例配置
3.2 升级配置
单击提交,发起演练任务,如果原实例为 postgres-3e3ug2nj ,则系统会生产一个实例名为 postgres-3e3ug2nj-pre-upgrade-20230809154431 的新实例,并完成后续的升级。
原理解析
为了方便您了解系统原理,合理规划大版本升级时间段,本文为您展示了在大版本升级过程中,后台系统所做的操作,具体如下图所示:
上图以 PostgreSQL 10升级到 PostgreSQL 14为例,详细说明了后台系统操作步骤如下:
1. 预检查
检查实例状态是否为运行中;
检查实例参数合法性;
检查升级目标版本是否合法。
2. 新建只读实例
新建源实例的只读实例,为减少升级操作对原实例的影响,后续升级操作会在该只读实例上进行。
3. 初始化新版本数据库
新建空白目录,初始化一个版本为目标版本的新实例,该新实例只有单节点。
4. 停止高版本节点、原实例主节点只读。
停止该新版本的实例,同时将源实例设为只读。
5. 只读实例提升为主实例、停止进程。
将只读实例提升为主实例,并停止该实例。
6. 执行升级
执行升级,导出并导入元数据,处理数据。
7. 启动新版本进程、切换路由、新建备机并回收历史节点。
启动升级完成的新版本实例,切换原实例路由信息,并给新实例搭建从节点。最后清理环境,任务结束。
注意:
系统升级完成后,请业务务必做好相关验证,以保证业务顺利运行,具体如下:
请在升级之后的数据库上进行业务负载测试。
验证插件兼容性。
验证参数兼容性。
系统限制
如果实例有关联只读实例,则需要先删除只读实例再发起升级。
如果实例存在磁盘空间超用则不能发起大版本升级。
热点问题
是否支持大版本降级?
不支持大版本降级,当前云数据库 PostgreSQL 大版本向前兼容,建议优先使用高版本。