Oracle与PostgreSQL比较:PostgreSQL至少在安装和大小方面击败了Oracle - foerster


我成为Oracle DBA已有二十年了(那时从Oracle 8.0.5开始),并且从10.3版开始仅使用PostgreSQL,我感到不得不与两者分享我的一些经验。
Oracle有一些好的概念。我喜欢单独的UNDO和TEMP表空间的概念,而不必关心清理。另外,我喜欢全局容器/集群范围的视图(例如CDB_TABLES等)的想法,我肯定会非常认真地想念PostgreSQL。
我特别讨厌Oracle(当然,尽管需要花费许可费用)是它有如此多的bug,bug甚至更多的bug,而且一整天都在不断寻找补丁程序,从而导致大量的停机时间。仅使用PSU或RU远远不够。
因此,最重要的是,我认为PostgreSQL至少在安装和大小方面击败了Oracle。
因此,猜想我在使用Oracle 20年后的错是什么...

下面是安装比较:
所有安装都在同一主机上执行,除了Oracle Data Guard和Patroni带有etcd,它们都至少需要三个节点,或者分别需要一个奇数(大于2)才能确定主数据库/主数据库和副本数据库/备用数据库。但是,所有机器都具有相同的硬件和操作系统:

    操作系统:openSUSE Leap 15.1(服务器设置,而不是台式机)
    CPU:Intel i7-7700T CPU 
    RAM:32 GB 
    磁盘硬件:SSD

而且,对于所谓的仅64位软件,Oracle需要安装161个附加软件包,其中许多是32位软件包!这将导致需要150 MB的额外磁盘空间,并用32位软件包淹没系统!
PostgreSQL只需要安装几个软件包,这取决于一个选择用来编译源代码的选项。无论如何,这些软件包都不需要32位版本!

PostgreSQL安装大小:

    软件:
        $ du -sh /data/postgres/12.3 /data/oracle/product/19.6 
        62M /data/postgres/12.3 
        8.5G /data/oracle/product/19.6 
    数据库:
        $ du -sh / data / oradb / * 
        3.3 G / data / oradb / cdb01#具有1个PDB的Oracle容器
        1.8G / data / oradb / sdb01#Oracle独立数据库
        $ du -sh / data / pgdb / sdb01 
        659M / data / pgdb / sdb01#PostgreSQL 12.3数据库集群

所有数据库都是干净的设置,没有模式,用户,表,数据等。只是一个空壳。

Oracle安装:
 

  Oracle 19c:        〜2h 
        解压缩到ORACLE_HOME 
        runInstaller 
解压缩最新的OPatch p6880880_200000_Linux-x86-64 
        应用p30797938_190000_Linux-x86-64(19.6.1)
    从源代码编译的PostgreSQL 12.3:〜3m30s 
        bunzip postgresql-12.3.tar.bz2到PGHOME 
        进行安装-世界

创建数据库:

    Oracle:
        创建独立数据库:〜30m 
        创建容器数据库(cdb $ root):〜47m 
        创建可插拔数据库(pdb):〜26s 
        运行数据库的内存相当好:
            独立数据库至少1 GB SGA 
            容器数据库至少4 GB SGA 
    PostgreSQL:
        initdb:<1s 
        创建数据库:<200ms 
        内存:128 MB db_buffers

启动/停止数据库:

    Oracle:
        启动(标准,1 GB SGA):〜15s 
        立即关闭(标准,1 GB SGA):〜21s 
        启动(容器,4 GB SGA):〜16s 
        立即关闭(容器,4 GB SGA) :〜23s 
    PostgreSQL:
        pg_ctl开始:0.1s 
        pg_ctl停止:0.2s 

    
其他发现/经验:
    Oracle:
        使用观察者(3.节点)设置Data Guard(2个节点):〜4h 
        应用PSU或RU通常需要60m的停机时间-90m。
        迁移主要版本通常需要60m-90m的停机时间。
        迁移新的主要版本需要提前很多工作。
        切换Data Guard需要大约1m。
    PostgreSQL:
        使用etcd(3个节点)设置Patroni(2个节点):〜30m 
        应用新的次要版本需要的停机时间少于2s。
        迁移新的主要版本需要的停机时间少于20秒。
        迁移新的主要版本需要几分钟的时间。
        切换Patroni大约需要1秒。

回复:我也曾与Oracle合作20年,主要是作为一名开发人员,但也有一些DBA工作。除非我不知道它们的“附加组件”,否则我不会遇到您似乎遇到的错误。坚持使用基本的RDBMS,我发现它非常可靠。但是,我更喜欢Postgres。主要的原因是,使用Oracle,你真的需要选择一条道路或其他-无论是开发商或者是DBA。在引入DAtaGuard,GoldenGAte等功能后,尤其如此。Oracle 比Postgres 承担了更多的管理工作,并且掌握了很多知识。
oracle的安装过程非常糟糕。除了所有的废话外,您通常还会在脚本中遇到错误。更糟糕的是,其中一些错误已经存在了20年,并且只是DBA处理的“已知”问题。他们的文档站点也很糟糕。
作为开发人员,只要您具备基本的数据库功能(即SQL和PL / SQL),并避免使用它们的扩展/附加组件,例如它们的各种pub / sub,规则引擎,PSP或他们通过购买公司并整合获得的任何东西,'它,非常好。我认为它们是目前最好的锁定模型之一。它们处理索引和更新的方式也比postgres快得多,并且您不必为性能而担心查询的结构。
不过,我更喜欢Postgres。主要原因是,尽管我可能需要考虑如何进一步构造查询,更新和索引,但总的来说,它会妨碍我的工作并满足我的要求-提供可靠的数据存储,供我使用和无需花费大量时间从事DBA任务即可完成工作。更新很容易,基本架构也很容易。
从oracle迁移到postgres时,最大的挑战是认识到它们是完全不同的,尽管它们都可以提供兼容的SQL实现,但相似之处到此为止。如果我在其他人负责所有DBA事务的环境中,那么Oracle很高兴与您合作。但是,只有当您在大型的,通常是官僚的环境中工作时,您才倾向于处于这种情况下,这往往会以其他方式损害整个体验。如果您很不幸还使用了Oracle的任何“增值”扩展,开发框架,应用程序层等,那真是太恐怖了,让人麻木了。
除此之外,Oracle许可绝对是一场噩梦。除了费用外,其复杂性令人难以置信,几乎不可能确切地知道您将在12、24个月或更长时间内支付的费用。- 蒂姆·克罗斯