openGauss对比PostgreSQL

news/2024/6/17 8:23:56

注:本文引用自https://cloud.tencent.com/developer/article/1674346

引言

openGauss是华为在2020.06.30开源的数据库,基于Postgresql9.2.4演进而来。华为在Postgresql基础上做了较多的改进点,因此openGauss相比于Postgresql是有一定优势的。不过Postgresql本身强大的社区能力,自身也在一直不停的更新版本,目前最新版本已经是PG 15。所以不好说openGauss一定比Postgresql好或者是一定比Postgresql差。

目前国内大部分的国产数据库要么是基于MySQL路线开发,要么是基于Postgresql开发,也有一些是基于openGauss开源社区。个人认为,基于Postgresql或openGuass开发的产品,可以针对Postgresql和openGuass的各自的优势进行补齐,作为产品后续迭代的功能。当然,如果既能够把好的新功能合并进来,同时又能够时刻与社区最新的版本兼容,这个是不容易的,需要强大的研发能力支撑。

本文只是针对两者的优劣势做一个稍微记录,供后续深入进行学习。

openGauss优势

openGuass支持最大可用模式most_available_sync

PG流复制有一个痛点就是在一主一从同步模式下,如果备库宕机,主库就会hang住,同步模式不能自动降级。Oracle有最大可用模式,而MySQL有半同步模式。PG中出现此问题时需要依靠第三方工具进行判断和监控,或者使用一主多备的方式来防止备库异常对主库的影响。
openGauss支持了最大可用模式,开启该参数后在主从连接正常的情况下处于同步模式,如果备机断连会立刻切为异步模式,如果备机再次启动会自动连接并切为同步模式。

openGauss中xid不可能耗尽

PG数据库中的xid是一个32位的整型,如果PG数据库运行了很久,会有xid耗尽的问题。PG针对xid耗尽的问题,采取环的方式进行处理,并在vacuum的过程中增加xid冻结处理。
openGauss中将xid由32位改为64位,因此正常情况下xid不可能会耗尽,不过openGauss中针对xid冻结处理的逻辑仍然存在,只是永远不会担心xid耗尽的风险。

流复制环境自动创建物理复制槽

openGauss中搭建主从流复制环境后会默认自动创建一个slot_name为对端nodename的物理复制槽,为了防止备库需要的xlog被主库删除或清理。

增量检查点

PG数据库中每次检查点执行时,会将所有buffer中的脏页刷到磁盘,如果脏页太多可能会一定的性能影响。
openGauss中支持增量检查点的功能,通过enable_incremental_checkpoint参数开启,通过小批量的分阶段的滚筒式进行脏页刷盘,同时更新LSN信息,回收不需要的xlog日志。

双写double write

由于操作系统数据块是4K,数据库的一个数据块是8K、16K或32K,这样当一个数据库从内存刷到操作系统的过程中可能因为宕机造成坏损坏从而数据库无法启动或恢复。
PG针对此问题采用了全页写Full Page Write,就是在checkpoint之后每个页面第一次修改时将整个页面的信息写到WAL中,但是这样会导致写放大的问题。MySQL针对此问题是采用双写,在脏块落盘时先把整个块写到共享表空间中并落盘,如果发现坏损坏,从共享表空间中将整个块读取出来进行恢复。不过Oracle针对块损坏的问题并没有采用什么处理,而是依靠ADG等恢复机制进行故障恢复。
openGauss实现了类似MySQL的双写功能,也是在写块的时候把脏页写到共享表空间中,如果发生问题会从双写表空间中找到完整的数据页进行恢复。通过参数enable_double_write并需要开启增量检查点一起使用。

客户端密码认证增强

PG默认的密码加密算法是md5,openGauss增强为SHA256,该功能需要配合客户端改造才能兼容。

xlog预分配

PG中的xlog日志是在写满后才会分配下一个日志,这样会导致写满一个16M的xlog日志时会有等待,导致PG在做并发写测试的时候性能会有抖动。
openGauss中实现了xlog的预分配,以xlog未写满时就分配下面一个或几个xlog,经压测性能较稳定。

流复制线程连接认证

openGauss中主备复制线程要连接对端服务器时默认需要进行ssl认证,增强安全性,可以通过remote_read_mode设置为non_authentication关闭认证。如果不关闭认证以主从方式启动数据库就会启动失败。

dbe_perf性能监控schema

openGauss在每个库下面增加一个dbe_perf性能监控视图,类似MySQL的performance_schema,里面有几百个性能视图,大部分PG里面也有,不过openGauss单独做到一个schema里面方便查看和管理。

流复制环境主库归档xlog数量最大值限制

openGauss对xlog做了最大值硬限制,通过max_sie_for_xlog_prune参数控制,不论xlog删除会不会影响备机,只要超过该值就进行删除。可以防止主备长期断连造成主库目录爆掉。

public schema安全权限增强

openGauss将每个数据库下默认的public schema做了安全增强,默认普通用户没有权限在public下创建对象,需要进行授权。

去除recovery.conf文件

openGauss去除了recovery.conf文件,将相关配置并入postgresql.conf。这一点PG 12版本中也去除了recovery.conf文件。

基于数据页的复制

openGauss支持基于redo的复制、基于数据页的复制以及两种混合复制,通过enable_data_replicate和enable_mix_replication参数进行控制。

支持列存表,列存缓冲区

openGauss支持列存表,通过cstore_buffers控制列存缓冲区大小,列存表支持压缩。openGauss优化了列存表并发插入性能,解决了插入时一行数据占一个cu造成空间急剧膨胀的问题。通过开启enable_delta_store参数控制列存表的插入使用临时表向主表merge的方式进行,既保证了性能,也解决了膨胀的问题。

内存表

openGauss支持基于LLVM的内存查询引擎,支持高吞吐、低延迟访问。

NUMA架构优化

通过NUMA绑核,减少跨核内存访问时延问题,提升CPU利用率,提升多线程间同步性能,xlog日志批量插入,热点数据分散处理。

用户资源管理

支持多租户环境下的CPU内存限制,配置资源池,调用操作系统cgroup实现。

WDR报告

支持类似Oracle WDR性能报告。

内存池memorypool

在更上一层管理数据库内存使用,限制一个数据库节点可用的最大物理内存。

查询内存限制query_mem

可以对某个查询使用的内存进行限制。

异步直接IO

开启磁盘预分配,IO预取,提升写入性能。

列存表delta merge性能增强

开启enable_delta_store参数控制列存表的插入使用临时表向主表merge,提升性能,解决膨胀。

并行回放

支持备机并行回放日志,提升复制性能。

会话超时

session_timeout参数控制会话超时时间,防止由于线程长期不释放造成数据库意外宕机。

主备从与一主多备

除了支持一主多备,也支持主备从模式,主备机物理复制,从机默认没有数据。当主库宕机时,备机和从机组成新的复制关系,从机开始复制数据。

线程池

openGauss将PG的进程模型改为线程模型,线程池支持上万并发,通过线程池实现session和thread之间的解耦,提高线程利用率,高并发下不会导致线程频繁切换。

commit log由256K改为16M

为了配合64位xid。

openGauss不足

openGauss中没有pg_stat_replication视图

PG中查看复制状态的视图在openGauss中被丢弃,无法查询主从Lag信息。

编译复杂,依赖过多

openGauss的编译需要很多依赖,而且版本固定,造成跨平台编译难度很大,平台通用性差。

不支持并行

openGauss不支持并行。这个不太理解。

没有postgresql.auto.conf

无法使用alter system set配置相关参数

不支持PITR

目前不支持基于时间点恢复。

不支持插件

PG的扩展性在于支持插件,openGauss不支持。

社区成熟度不高

没有PG的社区成熟度高。

周边工具

高可用工具、数据同步工具不具备。

性能不如原生PG

性能不如原生PG,由于不支持并行,分析类场景也有不足。

copydir限制

openGauss将数据库导入目录限制到pg_copydir中,如果要导数,需要先拷贝到数据目录下,容易造成数据目录满。


http://www.niftyadmin.cn/n/238895.html

相关文章

STM32HAL库 OLED显示屏的使用

文章目录 前言一、CubeIDE配置OLED显示屏iic引脚二、OLED驱动库1.引入库2.main.c中使用 总结 前言 本文主要讲解hal库配置与0.96寸oled屏的使用。 一、CubeIDE配置OLED显示屏iic引脚 OLED显示屏需要用到iic通信,此处选择了选择pb8为SCL、pb9为SDA 二、OLED驱动…

jupyter中的魔法函数

在jupyter中,使用魔法函数可以简单的实现一些单纯python要很麻烦才能实现的功能。 1. % 行魔法函数,只对本行代码生效。 2. %% Cell魔法函数,在整个Cell中生效,必须放于Cell首行。 3. %lsmagic: 列出所有的魔法函数 4…

大语言模型2-document ai解读

大语言模型的学习,首先来看简单有效的document.ai document.ai https://github.com/GanymedeNil/document.ai 该仓库简洁展示了如何搭建基于本地知识库的对话方案 数据集中的原始文本经过openAI embedding 存储到向量数据库中针对query,查询的问题转…

华为手表开发:WATCH 3 Pro(20)传感器订阅 佩戴状态

华为手表开发:WATCH 3 Pro(20)传感器订阅 佩戴状态 初环境与设备鸿蒙开发文件夹:文件新增展示的文本标记index.hmlindex.css 传感器订阅index.js 本篇教程将会介绍如何在华为 WATCH 3 Pro 上使用鸿蒙可穿戴开发进行传感器订阅&…

苹果跌倒检测新专利获得,结合苹果Find My可准确定位

苹果首款“跌倒检测”功能专利可追溯到 2018 年公示的 20190103007,后续又获得了至少 5 项相关专利。根据美国商标和专利局(USPTO)上周四公示的专利,苹果公司再次获得了一项“跌倒检测”功能专利。 苹果在报告中表示&#xff0c…

IC-14W网络IC卡读写器_银河麒麟桌面操作系统V10适配测试报告

银河麒麟操作系统产品NeoCertify 认证测试报告 系统版本:银河麒麟桌面操作系统V10 厂商名称: 广州荣士电子有限公司 认证产品:IC-14W网络IC卡读写器 测试日期: 2022-11-04 …

Python GUI自动化神器pyautogui,精准识别图片并自动点赞(32)

小朋友们好,大朋友们好! 我是猫妹,一名爱上Python编程的小学生。 欢迎和猫妹一起,趣味学Python。 今日主题 你听过GUI自动化吗? GUI自动化就是用软件模拟鼠标和键盘的操作。 提到Python GUI自动化,不…

家用洗地机有什么优缺点?实用的洗地机分享

随着科技的不断发展,家庭清洁设备也在不断更新换代。现在市场上最常见的家用清洁设备包括洗地机、扫地机器人和吸尘器。这些设备各有优缺点,但在清洁效果、清洁范围和清洁方式等方面存在差异。洗地机是一种专业的清洁设备,它能够深度清洁地面…