开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题
(本篇的思路来自于,盘古云课堂PG15 2023年2月18日晚,PG15 升级问题大讨论稿)
说起POSTGRESQL 的升级问题,很多同学会问,升级POSTGRESQL 的动力是什么,为什么要升级POSTGREQL 数据库。个人浅薄的愚见,一个数据库的升级本身并不是一件简单的事情,需要考虑的方面非常多,而一般如果每次升级数据库不是为了解决核心的问题,一般是不会单纯的由DB 来挑起整体数据库升级的问题。
而基于POSTGRESQL 的数据库升级,基本上也是基于这个导向来进行的,否则就不会到现在还有些公司在使用 POSTGRESQL 9.X 作为生产数据库来进行运营。
1 POSTGRESQL 解决性能问题进行升级
提到这个问题,我们可以看看POSTGRESQL 发展的历程,首先一个数据库的版本并不是一个新的版本产生就不在延续了,这是一个好的问题,截止去年PG10 已经到了 10.23这个版本,并且作为PG 10的最后一个版本。
我想提出一个问题是,去年PG15 已经发布了,为什么PG10 还存在并还在版本更新。
这就需要谈到版本的更新计划,一个新的版本的推出都是针对上一个版本的出现的功能性的或性能性的需要进行改变的部分,并从代码分支上进行大量改变的版本。
举例PG 15 中提到的在优化器方面的改变,就是一个重要的部分,并且一个新的版本的推出基本上都带有功能的大量更新或添加新的功能等,所以这样的新版本必然带来一个问题就是,BUG 多,考虑问题或者用户的使用才能带来更多发现问题并进行更新。
所以基于这个基本知识,我们带来同学的三个问题
为什么要升级 PG 的问题
升级到新版本要注意哪些坑
跨三个大版本升级需要注意什么
其实这三个问题可以合成一个问题,就是今天要说的问题
1 升级数据库版本,是优先大版本还是小版本
这里个人的观点是,升级数据库首先考虑小版本的升级,首先你在选择一个数据库版本中,会牵扯很多其他的部分,如开发,大数据,数据库的特性等,语法,在这些基础上,你跨越你当前的版本,去升级一个新的大版本,甚至要跨几个版本去升级,你的需求点来自哪里。
我特别害怕一个观点,就是一句简单的我要什么什么功能,新的版本性能有提升。这样的想法和观点,在大公司是不会被认可的,因为没有人会因为你的一个IDEA 去冒着极大的风险,去升级数据库。
而在当下,更多人关注的是大版本的升级,而不是当前版本的稳定性和BUG,这才是最让人担心的问题,诸如PG9.1.14 这里的在数据库的突然CRASH 的数据库文件缺失问题上的BUG 是需要被解决的,而不是我要去升级到PG15 来解决我当前系统由于9.1.14问题导致的系统不稳定的问题。
引擎在9.1.24 这个版本就发现9.1.14的BUG 并修复了这个BUG,所以盲目升级数据库是我们当前最大的一个问题,只重视大版本,忽略小版本的BUG FIXED。
所以在我们遇到数据库版本的问题,我们应该先查阅的是当前版本的小版本是否有对这个问题的改善或BUG FIXED,这才是我们思考问题的一个方式。
2 大版本升级中的隐患和问题
在PG的大版本升级中,会产生不少的问题我们可以归结为如下的一些需要知晓的部分
1 数据迁移的问题
大部分同学都知道PG 的数据库升级,尤其大版本升级是一件不容易的事情,主要的问题基于PG的数据库版本中的数据文件在每个版本都是不同的物理结构与变化。
所以在进行数据库版本的变化的情况下,越大的数据库的数据量是一个巨大的问题,同时一个频繁进行工作的业务数据库也是一个问题,停机的时间有多长,业务的数据如何不停机的同步到升级的数据库,等等都是问题。
所以数据库升级这个问题,可不是一个小的问题,也不是一个DBA 说说我通过逻辑复制槽进行增量复制那么简单的升级方案就可以搞定大版本的数据库升级的方案。
2 数据库功能改变对应用程序影响与周边的问题
举例 POSTGRESQL 15 中对于普通用户在 public schema 上的改变,开发者是否知晓,DBA 是否知晓并作出相关的改变,如果不了解升级中可能出现的问题,而是直接升级,那么估计连工作都难保证。
或者基于原有数据库中的 stats staticists 在PG 15 中不见了,而多了参数进行调整,如果不知道的话,提取状态信息和之前的一些理解有区别,那监控基于这个的化又是一个新的话题了。
所以在对于数据库大版本升级中,必须对新的版本有一定的试用或详细的了解,以及测试才能逐步的进行升级,而不是脑子一热就上去升级,然后可能数据库还有然后,你就没有然后了。
另外数据库的运维方面的变化也是需要考虑的,一个企业的数据库附带的软件也是一对,如备份软件,以及监控软件,你更换了更新的数据库产品,那么周边的软件是否能支持,这又是一个话题,这些软件是否能支持你的数据库,你自己心里有点数吗?
实际上在其他数据库上会被提及的问题,在PG的升级上也会被提到。
3 你是否有强有力的学习能力,去HOLD 住新的知识的问题
这还是一个问题,一个新的数据库是需要被了解和学习的,你在升级前,是否问过自己一个问题,一个新的数据库如果上线了,你是否能快速的解决他可能发生的问题,如果你此时问自己这个问题的时候,就将自己变成了一个问题,那么我劝你,还是悠着点,稍微等等吧,等那些先驱者升级了,采坑了,发文了,你在升级也不迟。
所以在升级一个数据库前,你是否有一个强大的,冷静的内心也是一个需要问自己的问题。
升级的误区 盲目升级,在升级,在在升级
这还是一个问题,这个问题的所在就是,数据库的升级并不是一个应该频繁进行的操作,这和应用程序的迭代不同。
一个数据库版本的升级,应该是深思熟虑的行为,你在做出这个决定的时候,应该了解升级会给你解决什么问题,获得什么最大的利益,或解决当前你无法在忍受,或者你公司在某些项目上无法对当前的数据库的一些问题进行解决,而需要更新的数据库提供更好的解决方案等等。
如果不是上述不能解决的问题,或棘手的问题,数据库一般是不会进行大版本升级的。
为什么要升级 PG 的问题
升级到新版本要注意哪些坑
跨三个大版本升级需要注意什么
所以今天的三个问问题,不知道上面的回答是否能覆盖,但是在升级数据库前问自己四个问题
1 你目前数据库版本的问题是否已经到了无法解决的地步,要靠升级数据库来解决
2 新的数据库版本,你是否能HOLD住,你已经预知可能产生的问题是那些
3 非技术问题,在迁移数据库中你会有什么对策或计划
4 升级后,你或你的项目获得的最大利益是什么