登录社区云,与社区用户共同成长
邀请您加入社区
分布式数据库架构演进正成为应对数据爆发增长的关键方案。本文分析了传统集中式数据库面临的性能瓶颈、混合负载能力缺失和高成本问题,系统阐述了分布式数据库的三大技术路线:分布式中间件+单机数据库、基于分布式存储的方案和原生分布式数据库。重点介绍了华为云GaussDB的原生分布式架构优势,包括安全可信、分布式事务GTM-Lite技术、查询优化和高可用能力等核心技术。文章还展望了分布式数据库未来六大发展方向
本文深入解析了GaussDB中的BTree和UBTree索引结构及其优势。BTree和UBTree基于BlinkTree设计,具有独特的节点连接和highkey特性,支持高效的moveright机制,相比传统B+树在读写并发和写写并发场景下表现更优,能够减少锁冲突并提高性能。UBTree还具备MVCC能力和独立垃圾回收功能,通过在索引层进行可见性检查减少了无效I/O操作。未来优化方向包括压缩索引空
【摘要】 并行计算技术作为提升数据库处理性能的重要手段,在现有的数据库产品中得到了广泛的应用。
摘要:GaussDB数据库通过内核级多租户技术(PDB)实现资源高效共享与隔离,支持CPU、内存等资源的灵活分配与秒级变更。相比虚拟机/容器方案,内核多租具有更低底噪、更高资源利用率(支持1U小规格)及快速实例发放优势。PDB间数据完全隔离,并提供关闭PDB释放资源的能力。WDR报告集成PDB信息,便于运维监控。该技术适用于不同业务场景,在保证安全性的同时显著降低成本。
GaussDB的Ustore存储引擎是一种面向OLTP场景的行存储引擎,采用原地更新(In-place Update)机制,通过分离存储最新数据和历史版本数据,有效解决频繁更新导致的空间膨胀问题。相比传统Astore引擎,Ustore具有三大优势:性能提升10%且更稳定,存储空间节约15%-20%,支持细粒度资源控制。其创新设计包括多版本索引Ubtree、自治式空间管理、NUMA-aware架构,
【摘要】本文系统阐述了GaussDB数据库性能调优的方法论与实践路径。首先提出"先定位瓶颈后针对性优化"的总体思路,通过监控平台分析CPU、内存、I/O等资源使用情况判断压力传导路径。针对CPU高负载问题,重点分析了SQL全表扫描、硬解析等典型诱因;内存优化则聚焦缓冲区命中率、算子落盘等关键指标;I/O和网络异常也给出具体诊断方法。针对锁阻塞问题,详细介绍了锁等待事件的定位技术
【摘要】GaussDB内存参数设置需结合实际业务场景以最大化资源利用。其采用逻辑内存管理机制,通过max_process_memory等参数控制实例、资源池、会话和SQL级别的内存分配。关键参数包括:shared_buffers(共享内存)、work_mem(排序操作内存)等。内存管理分为四级:实例级通过max_process_memory控制总内存;资源池级通过max_dynamic_memor
摘要:逻辑复制是一种灵活高效的数据库同步技术,通过解析事务物理日志生成逻辑日志,支持异构数据库间的数据迁移和同步。GaussDB提供逻辑解码基础能力,支持串行/并行解码、备机解码和分布式解码,实现低延迟、高吞吐的数据复制。关键技术包括:基于CSN的事务排序保证一致性,多线程并行解码提升性能,备机解码减轻主机负载,分布式解码处理跨节点事务。逻辑复制适用于数据备份、迁移、容灾等场景,但对一致性要求严格
【摘要】本文详细介绍了GaussDB数据库中的临时表功能。临时表分为本地临时表和全局临时表两种类型,主要用于存储会话期间的临时数据。本地临时表仅对当前会话可见,会话结束自动删除;全局临时表元数据对所有会话可见,但数据会话隔离,支持会话级和事务级两种模式。文章通过具体案例演示了临时表的创建、查询、修改等操作,并分析了全局临时表的使用限制和相关GUC参数配置。临时表适用于存储中间计算结果、临时数据处理
摘要:本文介绍了GaussDB分布式数据库的调优实践,重点包括参数配置、分布键与复制表选择、SQL优化和改写方法。在参数设置方面,建议开启流控、线程池等基础功能;分布键选择需基于业务SQL分析,避免JOIN操作产生broadcast/redistribute算子;SQL优化可通过分析执行计划、调整锁参数、禁用stream算子等方式提升性能;SQL改写则针对复杂查询进行重构。文章还提供了常用命令如清
摘要: GaussDB日志分析是数据库运维的关键环节,涵盖错误日志、WAL日志、慢查询日志等核心类型。错误日志帮助定位语法错误、主备同步异常;WAL日志用于事务恢复与主备延迟诊断;慢查询日志优化性能瓶颈。通过案例解析(如重复键冲突、WAL同步延迟、CPU争用)展示日志分析流程,结合自动化工具(GaussDB Advisor、华为云LTS)提升效率。建议配置日志轮转、实时监控及安全脱敏,建立标准化分
本文介绍了openGauss数据库存储引擎中的astore行存储格式和B-Tree索引机制。astore采用追加写优化设计,通过多版本元组机制实现读写并发控制,其页面结构包含元组指针数组和元组数据区。文章详细解析了astore的元组结构、页面布局、多版本实现原理以及三种空间回收机制(轻量级、中量级和重量级清理)。同时阐述了B-Tree索引的组织结构、元组格式及与堆表的协同机制,包括索引可见性判断和
openGauss数据库支持多种存储引擎以满足不同业务场景需求。存储引擎分为磁盘引擎和内存引擎两大类:磁盘引擎采用悲观并发控制,支持行存储(astore)和列存储(cstore)格式;内存引擎(mstore)采用乐观并发控制。存储引擎提供统一日志系统、多种并发控制机制、表级存储格式选择和统一的行存储访存接口。磁盘引擎详细介绍包括整体架构、代码结构以及行存储统一访存接口设计,该接口层屏蔽不同行存储子
openGauss是一款高性能、高可用的开源数据库系统,支持行存储、列存储和内存引擎三种存储模型,满足OLTP、OLAP及极致性能场景需求。其创新架构针对SSD和大内存优化,采用MVCC、并行日志恢复等技术提升性能。系统支持主备高可用、逻辑/物理备份、PITR恢复等特性,并通过WDR诊断、慢SQL分析等工具增强可维护性。在安全方面提供访问控制、数据加密、全密态查询等全方位保护。此外,openGau
openGauss是一款开源的关系型数据库管理系统,采用客户端/服务器架构,支持单机和主备部署方式。它具有丰富的功能特性,包括标准SQL支持、多种开发接口、混合存储引擎、事务支持、软硬件结合优化、智能优化器、AI自调优、安全特性、函数存储过程等。在系统架构上,openGauss包含服务器、客户端驱动和运维管理模块。其SQL引擎采用解析-分流-重写-优化-执行的完整流程,通过智能优化器生成高效执行计
摘要: GaussDB性能调优的核心目标是降低响应时间、提高吞吐量和资源利用率。优化方法包括硬件配置(如多核CPU、SSD存储)、集群架构(分区策略、读写分离)、参数调优(内存、并发设置)、查询优化(索引策略、避免全表扫描)以及资源管理(内存、I/O)。分布式查询需解决数据倾斜,并利用监控工具分析慢查询。实战案例显示,优化后性能可显著提升(如TPS从100增至5000)。综合运用架构、配置和查询优
本文介绍了GaussDB数据库中PL/SQL编程的关键技术,包括匿名块、存储过程和函数的创建与调用方法。详细说明了PL/SQL代码块结构、变量声明、控制语句(IF、LOOP)、游标操作(显式/隐式)、错误处理机制(EXCEPTION)、事务管理(COMMIT/ROLLBACK)以及动态SQL语句的使用。通过具体示例演示了如何实现数据操作、流程控制和异常处理,为GaussDB分布式数据库的存储过程开
摘要:华为GaussDB通过四层权限模型(系统/数据库/模式/对象)实现精细化访问控制,支持角色继承、列级授权等企业级安全需求。其特色包括动态数据掩码、行级安全策略、LDAP集成认证等安全机制,以及AI驱动的权限优化建议。最佳实践强调最小权限原则、定期清理和三权分立,为金融等高敏行业提供合规保障。随着智能审计和Serverless临时凭证等技术的发展,数据库权限管理正从静态配置向动态智能化演进。
摘要: 本文探讨了不同数据库中User和Schema的概念差异及权限管理实现方式。在SQL标准中,User是连接数据库的实体,而Schema是组织数据库对象的逻辑容器。Oracle自动为用户创建同名Schema,需通过"create any table"权限实现跨Schema建表;PG需手动创建Schema并授权USAGE和CREATE权限;GaussDB/OpenGauss则
摘要:文章分析了openGauss/PostgreSQL中不允许to_char等函数作为函数索引的原因,指出这类函数因依赖环境变量可能导致索引与数据不一致。通过Oracle实例展示了时区变化时,同一查询可能返回不同结果,验证了函数索引的风险。文章建议避免使用函数索引,若必须使用可创建标记为IMMUTABLE的自定义函数,但需注意SQL修改问题。最后提到openGauss的插件框架(如dolphin
摘要: 本文分析了Oracle与GaussDB在执行分组Top-N查询时的性能差异。通过构造包含50万条测试数据的表,对比发现Oracle 19.13执行含ROW_NUMBER()的分析函数仅需0.928秒,而GaussDB 506.0耗时显著更长。案例表明,直接迁移Oracle的SQL到GaussDB可能导致性能下降,需通过SQL改写优化。测试数据包含多组平局场景(如相同日期/数值),验证了分组
摘要 在报表SQL中,使用UNION合并明细与汇总行时,开发人员可能误用UNION代替UNION ALL。虽然数据无重复时结果正确,但迁移到GaussDB后,输出顺序可能与Oracle不同(如合计行位置不一致)。分析表明,UNION会去重并可能引发排序,而GaussDB默认采用哈希聚合(无序),导致结果顺序不可控。解决方案是改用UNION ALL保证顺序一致性,或在必要时显式排序。
本文演示了如何在openGauss数据库中实现多用户共享访问同一数据库。首先创建了musicdb数据库和三个用户(user1/user2/user3),并授予SYSADMIN权限。测试中,三个用户分别成功在musicdb中创建表(t1/t2/t3)、插入数据并执行查询。通过\dt命令验证了所有用户创建的表都存在于同一数据库中。后续示例进一步展示了类似操作,创建products1/products2
摘要:本文介绍了在openGauss数据库管理系统中的基本操作。主要内容包括:1)创建表空间music_tbs并在其上建立多个数据库(musicdb系列);2)使用\db命令查看表空间信息;3)通过\l命令查看数据库实例中的所有数据库;4)使用ps命令查看数据库实例的进程和线程信息。文中还提供了具体SQL示例,如创建music_tbs1表空间和music_db系列数据库的操作步骤,以及相应的查询验
摘要: 本文介绍了openGauss数据库客户端工具gsql的基本使用方法。主要内容包括:1) 使用gsql连接数据库的参数说明与示例;2) 查看数据库版本和版权信息的命令;3) 常用元命令的功能演示,如\l显示数据库、\dt显示表、\d查看表结构等;4) gsql的事务处理功能,包括自动提交和手动提交模式的设置与测试。文章通过具体命令示例展示了gsql的各种功能特性,如Tab键自动补全、历史记录
本文介绍了openGauss数据库的日常维护操作技术,包括检查数据库运行状态、锁信息、统计事件数据、版本日志信息、应用连接数以及例行维护表等关键操作。通过系统命令和SQL查询可监控实例状态、锁等待情况、会话内存使用、表统计信息等,确保数据库稳定运行。文章还提供了VACUUM、ANALYZE等维护命令的使用方法,帮助管理员及时发现并解决性能问题,保持数据库高效运作。这些技术对数据库管理员具有重要参考
gs_probackup是对物理备份工具gs_basebackup的增强版本,主要提供以下功能特性:支持PTRACK增量备份和页级恢复、增量备份合并、自动数据有效性检测、数据库checksum校验、灵活的备份保留策略、多线程并行操作、远程备份支持(SSH方式)、从备库备份避免主库负载等。使用前需配置enable_cbm_tracking参数并开启归档。备份流程包括初始化备份目录、添加备份实例、执行
摘要:本文分析了Oracle数据库shell脚本迁移到GaussDB的关键改造点。主要差异包括:1) GaussDB的sqlcode为字符类型,需创建转换函数;2) gsql执行参数需设置ON_ERROR_STOP=on才能返回正确状态码;3) 参数传递需通过set_config自定义变量实现;4) 错误输出需重定向2>&1。改造方案包括存储过程适配、shell脚本参数传递优化及SQ
最近看到反馈兼容的dba_triggers视图中,同一个触发器的trigger_event被拆成了多行,和ORACLE中表现不一致,于是我进行了一些分析,发现是在其引用的information_schema.triggers视图中就已经拆开成了INSERT/DELETE/UPDATE,但是这些属性都是通过tgtype这一个int2整型的字段获取的,甚至连before/after/instead o
我实测这个方案在技术上的确是可以的,但是GaussDB官方发布包,层层压缩(《GaussDB文档中心-GaussDB内核包提取方法》),要解压8~9次才能解压出内核二进制,手动解压动不动就是空间不足或者路径超长了,操作非常麻烦,因此我就想到要写一个脚本来自动提取出内核二进制文件。直接和Cursor说让根据这个sh脚本再生成一个windows上的,分分钟就生成了一个ps1文件,只是这下需要额外安装7
摘要:本文分析了openGauss中SQLCODE与SQLSTATE在兼容模式下的转换规则。通过源码解析,揭示了数值型SQLCODE转换为字符串型SQLSTATE的算法原理,并提供了相应的PLPGSQL函数实现双向转换。测试验证了转换函数的正确性,并提出通过配置参数实现与Oracle错误代码兼容的方案,以降低应用迁移成本。该方案可帮助解决数值型变量接收SQLCODE时的类型不匹配问题,同时支持双轨
摘要:本文分析了Oracle和openGauss在浮点数转整数时结果差异的问题。测试发现,当小数部分为0.5时,Oracle返回1而openGauss返回0,但1.5时两者都返回2。通过分析openGauss源码发现其使用C++标准函数std::rint()实现银行家舍入法。进一步测试Oracle的binary_double类型转换时出现更多不一致结果,甚至出现整数类型显示小数的异常现象。文章建议
GaussDB 506版本新增支持通过DBLINK连接Oracle数据库。安装需在实例机器上部署Oracle客户端,推荐使用TPOPS平台白屏化操作,支持特定版本的instantclient并需校验cksum值。安装后可通过CREATE DATABASE LINK语法创建连接,支持基本SQL操作但不支持存储过程调用和部分数据类型。功能实现上,GaussDB通过gs_ora_fdw封装器与Oracl
本文探讨了在openGauss中实现Oracle utl_file包功能的解决方案。主要介绍了两种方法:一是通过orafce兼容插件实现基本功能,并针对openGauss特性进行改进,结合pg_directory系统表实现目录管理;二是利用openGauss原生copy to语法结合AUTHID definer特性,直接实现查询结果导出文件的功能。
本文探讨如何在openGauss3.0中实现类似Oracle面向对象编程的功能。由于openGauss不支持Oracle的对象类型构造器和方法,作者提出通过创建同名package来解决:1) 使用package中的self函数构造对象;2) 将成员函数改写为package函数,添加self参数;3) 对于无需位置传参的场景,可直接使用type构造。这种改写方式使得面向对象逻辑得以保留,调用方式仅有
本文提出了一种高效的Oracle到MogDB数据同步方案,通过结合sqluldr2工具的标准输出功能和gsql的\copy标准输入功能,利用Linux管道实现数据实时传输。该方法避免了中间文件存储,实现导入导出同步进行,理论上传输时间仅取决于较慢的一端。具体步骤包括:配置双数据库客户端环境,使用sqluldr2导出数据到标准输出,通过管道直接传递给gsql的\copy命令导入。测试表明该方法能正确
摘要:Oracle和openGauss在LOB(大对象)数据类型处理上有显著差异。Oracle中BLOB/CLOB可存储4GB数据,通过LOB定位器访问,需用专用包(如dbms_lob)操作;而openGauss基于PostgreSQL,BLOB/CLOB仅是TEXT/RAW的别名,最大1GB,可隐式互转。二进制数据处理需特别注意:openGauss需先将BLOB转RAW再转BYTEA才能正确使用
摘要: OpenGauss与Oracle在函数重载机制上存在差异。Oracle通过PACKAGE支持同名函数重载,区分参数个数和类型。OpenGauss默认仅匹配存储过程名称和入参,不支持仅out参数不同的重载,但可通过参数behavior_compat_options='proc_outparam_override'启用此功能。测试表明,未启用时同名函数会被覆盖,启用后允许out参数不同的重载。
停止异常的 6001、6002 节点(cm_ctl stop -n [节点编号] -D [数据目录]),随后登录 6003 节点的沙箱环境(通过chroot切换隔离环境),执行gs_ctl failover -D [6003数据目录]将其提升为主节点。etcd 存储着集群的拓扑结构和状态信息,主节点变更需通过 Raft 协议同步至所有 etcd 节点,元数据不一致会导致管控命令执行失败。即使后台集
摘要: openGauss/MogDB中未直接提供会话CPU占用率查询功能。本文提出通过数据库视图获取会话线程ID,再结合系统命令(如top)计算CPU使用率的解决方案。脚本通过pg_stat_get_session_wlmstat获取活跃会话信息,匹配线程PID后,调用top命令实时采集CPU数据,最终生成包含数据库名、线程ID、CPU%、耗时及SQL语句的监控报表。该方法规避了侵入性代码修改,
摘要: 客户在GaussDB 506.0数据库高可用切换测试中,发现应用并发200时出现自治事务创建超时报错("autonomous transaction failed to create autonomous session")。分析发现,线程池模式下并发创建自治事务会导致数据库卡顿。测试表明,当初始线程数(thread_pool_attr)不足时(默认256),自治事务连
摘要 在Oracle迁移GaussDB过程中,遇到package编译报错"ERROR: Failed to query the 323 type in the cache"但无具体行号信息的问题。通过gdb调试分析,发现错误发生在errstart函数(位于elog.cpp)的4108行。测试用例表明,当package中procedure参数定义不一致(如声明为out参数但在实现
GaussDB全密态等值查询功能测试表明,该技术可在服务端不解密数据的情况下实现等值查询,但存在局限性。测试结果显示: 需通过特定客户端连接并设置密钥才能使用全密态功能; 加密列支持等值查询和更新,但无法进行模糊查询和范围查询; 非密态连接查询加密列会报错,且直接查询显示为密文; 尽管字段类型显示为常规类型,实际已转为二进制存储。该技术有效解决了数据在传输和存储中的泄露风险,但当前功能仍受限于等值
本文分析了不同数据库(Oracle、PostgreSQL、GaussDB/OpenGauss)中USER和SCHEMA的概念差异及实现方式。USER是数据库操作实体,在SQL标准中与ROLE不同,但PG系数据库将两者合并。SCHEMA作为逻辑容器,Oracle自动创建同名SCHEMA,而PG需手动创建。通过案例演示了如何实现用户跨SCHEMA建表:在Oracle中需授予CREATE ANY TAB
本文通过三个示例详细介绍了GaussDB中"alter default privileges"命令的使用方法。示例1展示了初始用户授权访问未来创建表/视图的操作流程;示例2演示了当前用户授权的简化操作;示例3则重点说明了如何指定SCHEMA进行精确授权。文章还附有完整的语法说明,包括对表、序列、函数等不同类型对象的授权子句。这些示例清晰地展现了该命令在实际授权管理中的灵活应用,
摘要: 本文介绍了GaussDB中ALTER DEFAULT PRIVILEGES命令的功能与用法,并通过实验对比其与GRANT命令的差异。ALTER DEFAULT PRIVILEGES用于设置未来创建对象的默认权限,而GRANT仅对已存在对象生效。实验表明,若需用户持续访问新创建的对象,需结合两者使用。文章详细解析了命令语法,包括FOR ROLE/USER和IN SCHEMA选项,并以表权限为
文章摘要:本文介绍了构建GaussDB数据库Docker镜像的方法。由于官方未提供现成镜像,作者基于KylinV10系统镜像,通过Dockerfile配置环境并集成GaussDB506.0内核,最终生成732MB的镜像(压缩后308MB)。文章详细说明了构建流程,包括基础镜像选择、环境变量设置、启动脚本编写等关键技术要点,并提供了参数优化建议和数据持久化方案。该方案实现了开箱即用的GaussDB容
本文提供了在CentOS7.6环境下快速安装openGauss企业版的简明指南。主要内容包括:关闭防火墙和SELinux、安装依赖包、下载解压安装包、配置主机名和环境变量、编辑clusterconfig.xml文件、使用root用户初始化环境后切换omm用户完成安装。最后介绍了openGauss的关键内存结构(本地内存区、共享内存区)和线程结构(postmaster、BgWriter等核心进程)。
摘要:在GaussDB 506.0.0环境中,执行包含多层嵌套UNION ALL的PL/SQL存储过程时出现会话卡死问题。测试用例显示,一个仅包含简单嵌套查询的存储过程会导致gsql会话无限期挂起,无法通过Ctrl+C或常规kill命令终止。诊断发现会话状态持续显示为active且未被阻塞,但所有终止会话的操作均无效。该问题可能与复杂SQL解析或执行计划生成阶段的死锁有关,需进一步分析内核处理机制
文章摘要:本文介绍了PostgreSQL/OpenGauss等数据库中的自定义参数功能,通过点号分隔的命名方式实现灵活配置。该功能支持会话级参数设置,可用于SQL上下文传递、行级访问控制等场景。相比Oracle的全局变量方案,自定义参数无需创建额外对象,通过current_setting函数即可调用。文章还提供了典型应用案例,如在多用户视图中实现数据隔离、模拟Oracle全局变量等,展示了这一功能