Oceanbase\TiDB分布式或GaussDB集中式同城双中心常用架构

数据是企业的重要生产要素,确保数据不丢失是大多数客户的核心目标。然而,要实现这一目标的高可用容灾方案不仅依赖于数据库产品的架构支持,还需要硬件成本的投入。同城双机房的配置在客户中较为普遍,如果追求RPO=0,无论是分布式数据库还是集中式数据库,个人了解到目前主流的数据库使用架构

, ,

Oracle MySQL PostgreSQL BLOB & CLOB maximum size Limit

The maximum size of large objects (LOBs) in Oracle, PostgreSQL, and MySQL varies depending on the type of LOB and the database system. Here are the details for each database:

脚本:用于分析PostgreSQL lock trees(堵塞树) 的查询

在数据库中分析系统中的锁等待非常重要, 在oracle中有大量的脚本,在Postgresql中也需要积累一些工具, 可以快速分析锁等待, 这里推荐几个好用的脚本。

Oracle国产化改造迁移openGauss时的问题: Error “remote table ‘xxx’ does not exist” 当使用Postgres_fdw时

在oracle中A库直接远程访问B库常见的有dblink, 在postgresql中有postgres_fdw和外部表,在opengauss系中同样有postgres_fdw、oracle_fdw(for Oracle)、mysql_fdw(for MySQL), 在EDB中postgres_fdw、oci_dblink(for Oracle)。但是发现对于opengauss到远程 opengauss的使用dblink访问时(有oracle应用迁移而来), 在oracle中常用的select * from t1@dblink1访问时,提示 remote table ‘t1’ does not exist, 即使创建user mapping时使用的t1表schema用户。如果应用中存在原oracle语法需要调整,影响postgresql和opengauss, 简单记录opengauss中的问题。

,

PostgreSQL性能调优相关的参数配置 (最佳实践)

在PostgreSQL数据库中,与硬件基础环境依赖相关的参数,默认配置通常不适合生产环境。正如 PostgreSQL wiki 页面所述,默认配置的选择是为了在各种可能缺乏大量资源的设备上更容易地安装数据库。Oracle数据库也存在类似的问题,因此在内存相关的参数上基于Advisor框架推出了ASMM和AMM自动管理,但大部分参数如优化器相关的,仍然是针对通用场景设计的。当然,也有大量的Oracle DBA基于自己的经验整理出了一些最佳实践参数。相较之下,PostgreSQL的参数数量远少于Oracle。下面整理了几个基础的数据库调优参数。

Oracle国产化改造迁移openGauss时的问题: 存储过程内部不要加”call”

在存储过程内可以调用其他多个存储过程或函数,这是支持 存储过程(procedure)的数据库都支持的,近日在做oracle到opengauss系(MogDB)的plsql对象做复审时,发现在一个主存储过程内部调用了其它多个子存储过程,但只执行了其中的第一个子存储过程,Exception捕捉了错误提示SQLERRM is: query has no destination for result data, 后来发现是因为存储过程改写时内部调用子存储过程前加了”call” ,其实用”PERFORM”也没问题

,

Oracle国产化改造迁移openGauss时的问题: 自定义聚合函数wm_concat

在Oracle 11g升级到更高版本时,默认不再提供 wm_concat 函数,而是用 listagg 函数替代。然而,很多应用程序在12c或19c中可能自定义了类似 wm_concat 的函数,例如 my_wm_concat。这些函数被广泛使用在应用程序中。当这些应用程序的数据库迁移到国产数据库如OpenGauss或PostgreSQL时,如果希望数据库层面兼容而不修改应用代码,通常迁移工具只能做语句规则替换。

对于自定义函数的迁移,由于人工改写时对Oracle或OpenGauss/PostgreSQL不熟悉,这可能会浪费一些时间。 简单纪录一个案例。

Unix epochs and datetime convert in Oracle, MySQL, PostgreSQL (纪元秒数与日期转换)

前几日一客户问我在oracle执行unix_timestamp函数报错,心想这不是MySQL的函数吗?难道oracle引入了?找了一圈到oracle 23ai也没有自带该函数,可以自定义函数实现, 在去年的一个oracle迁移到PostgreSQL系数据库里,有套业务库大量使用epochs做为datetime,这里简单记录在oracle, mysql ,postgresql中如何做unix epoch到datetime的转换.

抱怨最多的PostgreSQL问题在国产数据库解决了哪些?

两年前,Rick Branson撰写了一篇备受关注的文章,题为《10 Things I Hate About PostgreSQL》,其中总结了他对PostgreSQL的十大批评点。作为一位拥有近20年PostgreSQL使用经验的专家,他提出的问题是客观的。尽管他本人深表认可PostgreSQL,并且是其坚定的拥护者,但他不赞同一些人对其无条件的赞美。简单地看看国产数据库在解决这些问题上的进展,或许可以提供一些参考。

如何在 PostgreSQL 中生成随机文本字符串?

在数据库中,有时需要一种快速简便的方法来生成随机字符串来填充文本列,因为目前PostgreSQL中没有生成随机字符串的函数,可以考虑使用 Orafce 扩展,其中包括一个生成随机字符串的PostgreSQL 函数。或者创建自定义函数实现,如果使用orafce中的dbms_random生成函数记的检查可能与oracle一些形为不同。

,

在PostgreSQL/openGauss系数据库中如何拼接SQL?

在Postgresql中可以使用format()打印SQL, 使用$[tag]$ 匹配引号,还可以使用format type格式化文本对齐与标识自动加引号,创建易于维护的脚本,没有硬编码文本,并且不会忽略标识符的双引号。

PostgreSQL OpenGauss 在drop table后空间未立即释放(Released)问题

去年在记录<案例:openGauss/postgreSQL 数据库手动清理膨胀Heap Bloat (dead tup)>时遇到过在opengauss系统drop table后,操作系统并未立即释放问题,当时没有过多研究,只是建议通过kill SESSIONS或重启可以达到效果,近日发现同事在postgresql中同样遇到了该问题,但Postgresql是进程模式可以和oracle一样通过kill OS 进程释放文件句柄,并且PostgreSQL在2021-02-11 Release的版本都改进这一问题,目前Opengauss V5依旧存在

Oracle、MySQL、PostgreSQL、openGauss、达梦、OB、Tidb数据库比较系列(二十): 事务隔离级别

事务隔离级别是数据库事务处理的基础,ACID 中的 “I”,即 Isolation,指的就是事务的隔离性。ANSI/ISO SQL 标准定义了4 种事务隔离级别,对于相同的事务,采用不同的隔离级别分别有不同的结果。这些隔离级别是根据3 个“现象”定义的,

PostgreSQL中的effective_cache_size 参数

effective_cache_size 是一个参数,用于设置当 PostgreSQL 计划执行查询时,操作系统缓存和 Postgres 的共享缓冲区中将容纳多少数据的估计值。 此值用于确定数据库引擎对磁盘 I/O 的依赖程度,简而言之是planner对单个查询可用的磁盘缓存的有效大小的假设,这对数据库性能有重大影响。

Oracle、MySQL、PostgreSQL、openGauss、达梦数据库比较系列(十九): 增加列default value会表重写吗?

之前曾经在《oracle add column xx default value 增强(二)》记录过,在日常运维中增加column是常见的操作,对于大表增加列时是否会导致回写表还是只修改数据字典影响DDL的执行时间和停机窗口长短。之前也在《“alter table ” modify column in Oracle、MySQL、PostGreSQL(数据库比较系列十三)》记录修改column时不同库的表现, 这里简单记录测试一下当前主流的几个库对于add column的现象。

,

Oracle、Kingbase、OceanBase、TIDB、达梦数据库比较系列(十八): for update nowait 报错信息可读性

前几天看到有OB用户留言,提到OceanBase很可能是出于对他们需求的考虑,而应用中以前对ORACLE报错的依赖。这表明现在数据库厂家在满足各种甲方要求时也颇为无奈,在应用的兼容性上做了种种让步。就对于会话1事务中,会话2 select for update nowait相同的报错场景,我简单测试一下在其它国产库上是否还不如Oceanbase. 为了方便横向对比,这里我再简单的附上ORACLE 与OB的报错。

,

Oracle、MySQL、PostgreSQL、OceanBase、万里开源数据库比较系列(十七): IN ( MAX Subquery )

在关系数据库中两表关联在oracle中使用IN( subquery)的语法很常见, 但kevin发现在MySQL中subquery使用MAX聚合参数时,会导致主查询Full scan而无法使用索引范围扫描, 当遇到大表时可能性能下降明显 ,测试发现有的库使用子查询做为驱动表,有的是使用filter从主查询过滤。下面简单测试。

Oracle、MySQL、PostgreSQL/openGauss、达梦、OceanBase数据库比较系列(十六): Index scan MIN/MAX

在关系数据库中常见的一种需求统计表的记录的最大值或最小值,SQL中使用max min,为了最佳效率通常希望可以在列上创建索引,减少表段的IO量,如果可以可以使用更佳的执行计划如直接访问索引的头和尾(btree index的有序结构),减少index 块的访问,我们对比一下几款数据库在该方面的能力。

HighGo(瀚高)V6 数据库单机初体验

瀚高数据库在我好多年前预学习PostgreSQL时就有耳闻,有瀚高公司维护,该公司在PostgreSQL国际社区贡献度中也是中国排名靠前的组织,发起了另一个开源项目IvorySQL,同样是兼容oracle的postgresql数据库,两者都是在PostgreSQL路线做了大量的创新与生态工具,我记录体验一把HighGo企业版。

案例:openGauss/postgreSQL 数据库手动清理膨胀Heap Bloat (dead tup)

前段时间整理过一篇《有哪些技术可以减少PostgreSQL/openGauss数据库的存储空间?》,记录过postgresql系数据库出现的膨胀表(索引也一样)可能会导致数据库空间浪费,在openGauss中发现存在一个现象,比如对一张几千万行的table做过千万级大事务更新或平时更新比例较多时,autovacuum的清理并不理想,导致出现几十倍的空间膨胀,记录一则处理案例。