openGauss数据与PostgreSQL的差异对比

openGauss 数据与 PostgreSQL 的差异对比

1. 前言

openGauss 数据库已经发布 2.0.1 版本了,中启乘数科技是一家专业的专注于极致性能的数据库服务提供商,所以也关注 openGauss 数据库的特性。因为 openGauss 是从 PostgreSQL 发展出来的,所以我们详细讲解对比一下 openGauss 与原生 PostgreSQL 数据库的对比。

2. openGauss 大功能方面的变化

openGauss 是基于 PostgreSQL9.2 版本开发的,基本包括了 PostgreSQL9.4 的功能。目前 PostgreSQL 正式版本已经到 13 了, 14 的 beta 版本也发布了。openGauss 只把 PostgreSQL9.4 之后的新版本的极少数功能移植进来了,绝大多数功能都没有纳入。

openGauss 最大的变化就是把 PostgreSQL 的进程模式改成了线程模式,当然这两个模式其实各有优缺点。线程模式对短连接有优势,比进程模式的数据库可以承担更大的并发短请求,但线程模式也有明显的缺点,所有的线程共享内存,如果一个线程的的野指针把别人的内存改了,不会报错,一时半会可能还发现不了,极端情况下会导致数据损坏而不被发现。所以说这个改变不能说有什么明显的好处,某些情况下可能还是一个退步。为了改成线程模式,openGauss 的把 C 语言的源代码改成了 C++。C++的好处是容易封装,坏处是移植性降低了。

当然 openGauss 增加了线程池的功能,目前还不清楚这个功能是否稳定可靠。如果稳定可靠可以不使用第三方的连接池工具了。

openGauss 另一个变化是把事务 ID(XID)从 32bit 改成了 64bit,64bit 的 xid 的好处是永远不可能耗尽,好处是我们永远不用担心会发生 xid 回卷宕机的风险。注意,虽然 xid 改为了 64bit,但是过期的事务 ID 依旧需要清理。实际上 PostgreSQL 数据库默认达到 2 亿事务就强制整理,而 32bit 的 xid 可以达到 20 亿,所以我们实际上可以修改 autovacuum_freeze_max_age 为 10 亿来推迟对 xid 的整理。

我们知道磁盘扇区大小是 512 字节,一些 SSD 可以是 4k 大小,而数据库一般是 8k/16k/32k,一个数据库数据块刷到操作系统的过程中可能发生宕机造成这样有块断裂问题,即块中一半是新数据,另一半还是旧数据,这就是块的逻辑损坏,这可能导致数据库无法启动。

MySQL 通过双写 double write 来解决这个问题&#x

### openGauss 数据库主从复制配置 #### 配置环境准备 为了确保主从复制正常工作,需确认主机和备机之间的网络连接畅通无阻,并完成基本的安装部署操作。此外,还需保证两台机器的时间同步以及 SSH 互信设置已经就绪。 #### 修改参数文件 编辑 `postgresql.conf` 文件来调整必要的配置项以支持流复制功能: ```sql wal_level = replica -- 设置WAL级别为replica以便于日志传送 max_wal_senders = 10 -- 定义最大允许的同时进行的日志发送进程数 hot_standby = on -- 启用热备份模式使备库可读取数据 ``` 以上修改旨在为主节点准备好向备用节点传输更改记录的能力[^1]。 #### 初始化备库并启动服务 在初次建立副本关系时,在备服务器上通过命令行工具 pg_basebackup 执行全量备份初始化过程: ```bash pg_basebackup -h 主机IP地址 -D /data/cluster_directory -U replication_user -P -v -X stream –P ``` 此指令会创建一个新的集群目录并将所有必需的数据文件从主实例拉取下来填充进去。 #### 创建恢复配置文件 随后需要在新克隆出来的数据库环境中放置名为 `recovery.conf` 的特殊文本档,其内部应指定远程源端口及其他必要选项用于维持持续性的增量更新流程: ```plaintext standby_mode = 'on' primary_conninfo = 'host=master_ip port=5432 user=replication_user password=yourpassword' trigger_file = '/tmp/postgresql.trigger.5432' restore_command = 'cp /mnt/server/archivedir/%f %p' archive_cleanup_command = 'pg_archivecleanup /mnt/server/wals %r' ``` 上述设定使得次级站点能够在接收到最新事务提交之后立即应用它们,从而保持上级的一致状态。 #### 常见故障排除方法 当遇到主从不同步或其他异常状况时,可以从以下几个方面着手解决问题: - **检查日志信息**:查看 PostgreSQL 日志文件中的错误提示,定位具体原因; - **验证网络连通性**:测试主备之间能否互相 ping 通,SSH 连接是否稳定; - **对比版本差异**:确保主备两端使用的 OpenGauss 版本一致; - **评估磁盘空间**:留意是否有足够的存储容量供写入新的 WAL 段; - **审查权限分配**:确认用于复制目的账户具备适当的操作许可; 对于更复杂的场景,则可能涉及到深入分析系统性能指标或是借助专业的诊断工具来进行辅助判断。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值