在数据库管理和维护过程中,数据库版本升级是一个常见但重要的任务。不仅会涉及技术方面的问题,还需要考虑时间和资源的投入。这里探讨数据库升级所需的时间、与时间相关的因素以及提高升级效率的方法。
- 为什么CDB环境的数据库升级时间比NON-CDB环境更长?
在CDB(多租户数据库)环境中,存在默认的CDB、SEED和用户自建的PDB。相比之下,NON-CDB环境只包括用户自建的数据库,可以视为CDB环境中只有CDB和用户自定义的对象,没有SEED这些PDB。在CDB环境中,升级的流程是首先升级CDB,然后升级SEED和用户自定义的PDB。而在NON-CDB环境中,只需要升级数据库本身,无需处理PDB$SEED和用户自建PDB。
尽管从12.1版本开始,数据库升级引入了并行机制,但在CDB环境和NON-CDB环境中,并行机制存在一些差异:
- CDB环境中,CDB$ROOT的并行度默认为4,最大可设置为8。
- 非CDB$ROOT的并行度为2,这意味着每个PDB有2个升级进程,尽管这也可以通过参数进行调整。
- 非CDB$ROOT的PDB可以同时并行升级,并行的PDB数量由参数决定。
因此,在CDB环境中,如果采用标准的升级方式,需要更长的时间来完成升级。
- 数据库升级时间与哪些因素有关?
数据库升级实际上是更新数据库自带的对象,如函数、包、视图、表、索引等。这些对象根据数据库组件进行分类,不同的组件对应不同的对象,组件数量越多,需要升级的对象就越多,升级所需的时间也就越长。组件之间的升级是串行的,尽管12.1版本后引入了并行升级机制,但并行升级仅限于单个组件内部,无法跨越组件。
数据库升级实际上是执行CREATE、DROP、UPDATE等SQL语句,影响这些语句执行时间的因素也会影响数据库升级时间,如:
- 统计信息:统计信息直接影响SQL执行计划,必然会影响SQL执行效率。在数据库升级计划中,通常会提前验证和收集字典表和固定表的统计信息。
- CPU/IO资源:数据库升级操作本身通常不是高并发和I/O密集型操作,对CPU和I/O资源的需求不高。但是,更多的CPU和I/O资源可以提高SQL运行效率,从而减少数据库升级时间。
- 数据库大小:数据库升级仅修改数据库自带的对象,与数据库整体大小没有直接关系。数据库对象的数量更多,DDL信息和统计信息等也会更多,存储在系统表中,这会导致系统表的性能下降,从而影响数据库升级时间。
此外,一些特殊因素,如使用OGG的IE模式或SPATIAL功能,也会影响数据库升级时间。
- 如何提高数据库升级效率和降低升级时间?
数据库升级操作本身虽然简单,但实际上是一个复杂的任务,需要在前期进行详尽的方案验证、业务功能测试、性能测试、兼容性测试和升级方案测试。只有通过充分的测试,才能了解每个步骤需要多长时间,是否存在优化的空间。此外,数据库升级涉及众多工作和流程,需要从整体考虑如何提高升级效率,降低对业务的停机时间。
以下是一些提高数据库升级效率和降低升级时间的建议:
- 减少组件数量:组件越多,升级对象越多,升级所需的时间越长。减少数据库组件的数量是提高升级效率的有效方法。
- 最佳实践:每个版本的升级都有详细的官方操作文档,可以根据这些文档结合实际环境制定最佳实践文档,并开发自己的工具或脚本。
- 新建CDB:在CDB环境中,可以通过新建CDB并通过拔插PDB的方式将PDB从旧版本迁移到新版本的CDB中,从而减少升级CDB的时间,降低升级PDB的时间。
- 处理特殊情况:特殊情况可能影响升级效率,需要仔细观察升级执行的SQL语句,提前发现隐患并采取适当措施,如数据量较大的表或特殊列的升级。
总结而言,数据库版本升级是一个复杂但必要的任务,需要仔细规划和测试,以确保最小的停机时间和最高的效率。通过理解数据库升级所需时间以及与时间相关的因素,以及采取一些有效的策略,可以在数据库升级过程中取得更好的效果。
此外,数据库版本升级不仅是技术任务,还需要在业务方面有清晰的计划和沟通。以下是一些建议:
与业务方面的紧密协作:在升级之前,与业务部门密切合作,确保他们了解升级计划,可以安排业务暂停时间,以最小程度影响业务运行。
定期备份:在升级之前,定期备份数据库以确保数据安全。这是一个紧急恢复的关键措施。
监控和日志:在升级过程中密切监控数据库的性能和日志。及时识别问题并采取措施来解决。
回滚计划:制定回滚计划,以便在出现问题时能够快速恢复到升级之前的状态。
培训和知识转移:确保数据库管理员和维护团队具备升级后的新特性和变化的知识,以便更好地维护和管理新版本的数据库。
最后,数据库版本升级是一项重要的任务,需要仔细计划和准备。通过理解数据库升级所需的时间,与时间相关的因素以及采取有效的策略,可以确保顺利完成升级并减少对业务的不必要影响。同时,与业务部门的协作和充分的备份、监控和回滚计划也是确保升级成功的重要组成部分。




