• [技术解读] 介绍一下GaussDB资源冻结
    介绍一下GaussDB资源冻结GaussDB的资源冻结是一种精细化资源管理机制,旨在通过限制数据库实例的计算、存储或网络资源,实现成本优化、故障隔离和风险控制。以下从核心机制、操作方式、应用场景及注意事项等方面详细介绍:一、核心机制​​冻结对象与类型​​​​层级​​:可针对数据库实例、表空间、用户会话等级别实施冻结。​​维度​​:​​计算资源​​:限制CPU核数、并行线程数;​​存储资源​​:冻结表空间扩容或限制IOPS;​​网络资源​​:限流连接数或带宽。​​冻结策略​​​​触发方式​​:支持手动执行、按时间计划(如夜间冻结)、阈值触发(如存储使用率超80%自动冻结)。​​技术原理​​:基于Linux cgroups与Kubernetes资源配额(Resource Quota)实现物理资源隔离;冻结后非关键操作(如统计分析)被限流,核心事务(如支付)仍保障SLA。​​与弹性伸缩的区别​​​​特性​​ ​​资源冻结​​ ​​弹性伸缩​​​​目标​​ 限制资源滥用,降低成本 动态扩容应对突发负载​​生效速度​​ 秒级生效 分钟级扩容​​适用场景​​ 长期资源规划、安全防护 短期流量高峰二、操作方式​​控制台操作​​路径:实例详情页 → 资源管理 → 配额设置 → 选择资源类型(如CPU/存储)并设置阈值。​​自动冻结​​:启用阈值触发策略并绑定告警通知(短信/邮件)。​​命令行(CLI)​​# 冻结CPU资源至2核,持续24小时 gaussdb-cli resource freeze --instance-id mysql-123 --cpu-quota 2 --duration 24h # 解冻CPU资源 gaussdb-cli resource unfreeze --resource-type CPU --instance-id mysql-123 支持--exclude-user参数排除关键业务账号。 ​​API调用​​ from huaweicloudsdkgaussdb import GaussDBClient client = GaussDBClient() response = client.freeze_resource( instance_id="mysql-123", resource_type="storage", quota=50, # 冻结存储至50GB action="freeze" ) 适用于自动化运维集成。三、典型应用场景​​成本控制​​​​案例​​:开发测试环境在非工作时间自动冻结,结合周末释放闲置实例,降低月度成本35%。​​策略​​:工作日00:00冻结非生产库存储扩容权限,周末切换低配规格。​​容灾与故障隔离​​​​备库资源抢占​​:主库故障时,限制备库CPU≤30%,避免雪崩效应;主库恢复后自动解冻并负载均衡。​​安全防护​​​​DDoS防御​​:检测异常流量时冻结新连接请求(每秒≤100),终止异常查询会话。四、注意事项​​避免业务中断​​冻结后实例不可访问,业务中断(如用户无法连接数据库)。​​建议​​:关键业务(如支付库)默认禁用自动冻结,预留10%~15%资源缓冲区。​​解冻策略​​​​自动解冻​​:配置资源使用率阈值(如存储≥70%)触发恢复。​​分阶段解冻​​:突发流量下渐进解冻(20%→50%→100%),避免资源过载。​​费用与数据风险​​​​费用​​:冻结期间计算/网络费用停止,但存储费用仍计费。​​数据备份​​:欠费冻结期间无法备份,需先续费解冻。五、总结GaussDB资源冻结通过秒级生效的精细化控制,为企业提供了平衡性能与成本的运维手段。​​核心价值​​在于:​​灵活性​​:结合时间计划与阈值触发,适配业务峰谷;​​安全性​​:通过资源隔离防御故障蔓延与攻击;​​成本效益​​:显著降低闲置资源开销,需配合监控工具(如华为云CloudEye)实现解冻告警联动。建议在非生产环境模拟冻结测试(如50% CPU冻结导致响应时间增加15%~20%),验证对业务的影响后再上线。
  • [问题求助] gaussdb执行计划中出现的BYPASS字样,该如何理解和处理?
    有如下表和查询:testdb=> \d+ tenk1                           Table "user1.tenk1"   Column    |  Type   | Modifiers | Storage | Stats target | Description-------------+---------+-----------+---------+--------------+------------- unique1     | integer |           | plain   |              | unique2     | integer |           | plain   |              | two         | integer |           | plain   |              | four        | integer |           | plain   |              | ten         | integer |           | plain   |              | twenty      | integer |           | plain   |              | hundred     | integer |           | plain   |              | thousand    | integer |           | plain   |              | twothousand | integer |           | plain   |              | fivethous   | integer |           | plain   |              | tenthous    | integer |           | plain   |              | odd         | integer |           | plain   |              | even        | integer |           | plain   |              | stringu1    | name    |           | plain   |              | stringu2    | name    |           | plain   |              | string4     | name    |           | plain   |              |Indexes:    "tenk1_hundred" ubtree (hundred) WITH (storage_type=USTORE) TABLESPACE pg_default    "tenk1_unique1" ubtree (unique1) WITH (storage_type=USTORE) TABLESPACE pg_default    "tenk1_unique2" ubtree (unique2) WITH (storage_type=USTORE) TABLESPACE pg_defaultHas OIDs: noDistribute By: HASH(unique1)Location Nodes: ALL DATANODESOptions: orientation=row, compression=no, storage_type=USTORE, segment=offtestdb=> set max_datanode_for_plan=3;SETtestdb=> explain select * from tenk1 where unique1=10;                                                                                          QUERY PLAN---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Data Node Scan  (cost=0.00..0.00 rows=0 width=0)   Node/s: dn_6004_6005_6006 Remote SQL: SELECT unique1, unique2, two, four, ten, twenty, hundred, thousand, twothousand, fivethous, tenthous, odd, even, stringu1, stringu2, string4 FROM user1.tenk1 WHERE unique1 = 10 Datanode Name: dn_6004_6005_6006   [Bypass]   Index Scan using tenk1_unique1 on tenk1  (cost=0.00..2.28 rows=1 width=244)     Index Cond: (unique1 = 10)(9 rows)在《HCIE-GaussDB-OLTP V1.0 实验手册》中,对于bypass的解释是:“bypass字样说明执行引擎走了更加轻量化的bypass执行过程”。在《GaussDB轻量化部署形态 24.7.30 产品文档 01》中的《开发指南》分布式版中,对于参数“enable_opfusion”的说明中,则提及:“如果DN的执行计划中带有[Bypass]标识则代表该查询在该DN可以查询优化。”如上,前者似乎表示走了更好的执行步骤,而后者似乎表示还有优化空间。那在执行计划中遇到bypass出现时,该如何理解和处理呢?
  • [技术解读] 多台弹性云服务器是否可以连接同一个GaussDB数据库
    多台弹性云服务器是否可以连接同一个GaussDB数据库​​1. 连接方式与适用场景​​​​内网连接(推荐)​​​​条件​​:ECS与GaussDB需在同一区域(Region)、同一虚拟私有云(VPC)。​​优势​​:低延迟、高安全性,无需公网流量费用。​​操作​​:在GaussDB控制台获取实例的​​内网IP和端口​​(如192.168.0.16:8000)。配置ECS安全组的​​出方向规则​​,允许访问GaussDB的内网IP和端口。配置GaussDB安全组的​​入方向规则​​,允许ECS的私有IP访问。​​公网连接​​​​条件​​:ECS与GaussDB不在同一VPC时,需为GaussDB绑定​​弹性公网IP(EIP)​​,并为ECS绑定EIP。​​风险​​:网络延迟较高,需通过SSL加密(如PGSSLMODE=verify-ca)提升安全性。​​DAS连接(可视化工具)​​通过华为云数据管理服务(DAS)直接连接GaussDB,无需配置IP,适合管理操作。​​2. 配置步骤​​​​获取连接信息​​:登录GaussDB控制台,在实例详情页的 ​​“节点列表”​​ 中获取CN节点(分布式版)或主DN(集中式版)的IP,在 ​​“网络信息”​​ 中获取端口号。​​测试网络连通性​​:在ECS上执行 telnet <GaussDB_IP> <端口>,若不通则检查安全组规则。​​安装客户端工具​​:在每台ECS上安装gsql客户端:# 下载驱动包并解压 unzip GaussDB_driver.zip tar -zxvf GaussDB-Kernel_***_EULER_64bit-Gsql.tar.gz # 配置环境变量 export PATH=$PATH:/tmp/tools/bin export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/tmp/tools/lib​​连接数据库​​:gsql -d postgres -h <IP> -U root -p 8000​​3. 性能与资源限制​​​​并发连接数限制​​:GaussDB支持高并发(理论最大10万连接),但实际受实例规格影响。例如:复杂查询:建议并发 ≤80短事务:建议并发 ≤5000。超出限制会导致连接拒绝或性能下降,需通过参数 max_connections 调整。​​资源隔离建议​​:使用​​连接池​​(如PgBouncer)复用连接,避免频繁创建/销毁开销。监控CPU/内存:若多台ECS频繁读写,需确保GaussDB实例规格(如CPU核数、内存)足够。​​4. 典型应用场景​​​​高并发业务系统​​电商平台:多台ECS处理用户请求,共享同一GaussDB存储订单数据。​​读写分离架构​​写操作指向主节点,读操作分散到只读副本,通过多台ECS分担负载。​​分布式应用​​微服务架构中,不同服务(如用户管理、支付服务)的ECS连接同一数据库,确保数据一致性。​​总结与建议​​​​可行性​​:多台ECS连接同一GaussDB​​完全可行​​,是分布式业务的常见设计。​​优化方向​​:​​网络​​:优先选择同VPC内网连接,减少延迟。​​安全​​:内网隔离 + SSL加密公网连接。​​性能​​:监控连接数、启用连接池,按需升级实例规格。
  • [技术解读] GaussDB是否支持磁盘缩容
    GaussDB是否支持磁盘缩容GaussDB目前暂不支持磁盘缩容​​。以下是详细分析和替代方案:一、磁盘缩容的现状与限制​​明确不支持​​多个官方文档(包括产品说明、变更指南)明确表示:“GaussDB暂时不支持磁盘缩容”。无论是分布式实例(如GaussDB for MySQL/Redis)还是标准版,均无法直接缩减已分配的磁盘空间。​​根本原因​​:分布式架构中,磁盘空间与分片(Shard)数量强绑定。每个分片包含固定副本(默认3个DN副本),缩容需重分布数据并减少分片,但磁盘空间作为物理资源难以独立缩减。​​替代方案:数据迁移​​若需减少存储占用,唯一方案是​​创建新实例+数据迁移​​:新建一个较小磁盘空间的GaussDB实例,通过华为云DRS(数据复制服务)迁移数据。​​操作路径​​:控制台 → 数据库迁移服务 → 配置源库(原实例)和目标库(新实例)。​​注意​​:迁移过程中需暂停写入,建议在业务低峰期操作。二、存储优化建议(替代缩容)虽然无法直接缩容,但可通过以下方式优化存储利用率:​​清理冗余数据​​​​日志清理​​:定期清理Binlog(设置expire_logs_days参数)、审计日志。​​碎片回收​​:对频繁删改的表执行OPTIMIZE TABLE,释放未利用的磁盘空间。​​长事务监控​​:避免未提交事务堆积Undo日志(通过information_schema.innodb_trx表检测)。​​冷热数据分层​​将历史数据归档至低成本存储(如OBS),仅保留热数据在GaussDB中,结合分区表按时间隔离数据。​​存储压缩技术​​GaussDB支持数据压缩(如行存/列存压缩),可显著降低实际存储占用(需在表创建时指定COMPRESSION参数)。三、磁盘扩容的注意事项若未来需扩容磁盘,需遵循以下规则:​​扩容条件​​磁盘使用率≥85%时,实例自动进入​​只读模式​​,必须扩容才能恢复写入。扩容大小须为 ​​40GB×分片数量的整数倍​​(例如:3分片实例需按120GB、160GB等梯度扩容)。​​操作步骤​​控制台路径:实例管理 → 目标实例 → “磁盘扩容” → 选择空间大小 → 提交(耗时约3-5分钟)。四、总结与建议​​能力​​ ​​支持情况​​ ​​替代方案​​​​磁盘缩容​​ ❌ 不支持 新建小容量实例 + DRS数据迁移​​磁盘扩容​​ ✅ 支持(需满足梯度要求) 控制台直接操作,秒级生效​​存储优化​​ ✅ 支持(清理+压缩+分层) 定期维护降低实际占用​​建议​​:规划存储时预留20%缓冲,避免频繁扩容。长期未使用的实例可选择​​释放资源​​(删除前备份数据),而非缩容。注:华为云未来可能开放磁盘缩容功能,建议关注官方公告或通过工单咨询最新进展。
  • [技术解读] GaussDB企业版和基础版是否可以互相切换
    GaussDB企业版和基础版是否可以互相切换​​不支持切换的原因​​​​架构与功能差异​​:​​企业版​​:支持高级特性(如动态脱敏、防篡改、透明加密、多租户管理),且仅支持​​分布式独立部署​​(资源独占),适合高性能生产环境。​​基础版​​:裁剪了企业版的高级功能,支持​​混合部署​​(资源复用),成本更低,但性能受限(分布式混合部署性能仅为企业版的50%)。切换涉及底层资源重组、参数适配及功能兼容性风险,可能引发业务中断或数据异常。​​技术限制​​:版本切换需退订原实例并重新订阅新类型,操作流程复杂且无自动化工具支持。企业版的部分参数(如安全策略、资源隔离配置)在基础版中无法兼容,强行切换可能导致功能失效。​​替代解决方案​​若需变更版本,必须​​重新创建实例并迁移数据​​:​​创建新实例​​:在控制台新建目标版本的实例(企业版或基础版)。​​数据迁移​​:使用​​数据复制服务(DRS)​​ 进行全量+增量同步,实现业务无缝切换。迁移前需在目标实例预置兼容的参数配置(如字符集、事务隔离级别)。​​业务验证​​:迁移完成后,测试业务功能及性能是否符合预期。​​注意事项​​​​成本与性能权衡​​:基础版价格仅为同规格企业版的 ​​30%(集中式)或 7.5%(分布式)​​,但牺牲了高阶特性与稳定性。企业版支持最大 ​​128核+1024GB内存​​规格,基础版上限为 ​​64核+512GB​​(X86)或 ​​60核+480GB​​(ARM)。​​安全风险​​:从企业版切换至基础版将​​丧失动态脱敏、防篡改等安全功能​​,敏感数据可能暴露风险。​​备份策略重置​​:新实例需重新配置自动备份、跨区域容灾等策略,原实例备份无法直接复用。​​总结建议​​​​生产环境慎切换​​:核心业务或需高级安全特性的场景,​​禁止降级至基础版​​。​​测试环境可选基础版​​:非关键业务(如开发测试)可选用基础版降低成本。​​迁移前充分评估​​:通过华为云DRS文档规划迁移窗口,避免业务高峰期操作。注:以上结论综合自华为云官方文档对版本切换的限制说明及迁移方案指南。
  • [技术解读] 在GaussDB中购买磁盘加密功能后,​​备份文件默认不会自动加密​​。以下是关键细节和解决方案
    在GaussDB中购买磁盘加密功能后,​​备份文件默认不会自动加密​​。以下是关键细节和解决方案:​​磁盘加密与备份加密的关系​​​​磁盘加密​​:仅对实例的​​数据磁盘​​进行加密(即运行时数据),但​​不覆盖备份文件​​。备份文件存储在对象存储服务(OBS)上时,除非单独启用备份加密,否则数据仍为明文存储。​​备份加密需单独开启​​:若需加密备份文件,必须额外开启​​备份加密功能​​。开启后,新增的备份文件会通过数据加密服务(DEW)自动加密,但开启前的历史备份不受影响。​​关键限制与注意事项​​​​加密不可逆​​:磁盘加密状态在实例创建后​​无法修改或关闭​​,密钥也不可更换。备份加密开启后,若关闭则后续备份不再加密,但已加密备份​​不会解密​​。​​密钥管理要求​​:加密使用的密钥(支持SM4/AES_256算法)​​不可被禁用、删除或冻结​​,否则会导致加密备份无法恢复。密钥需通过华为云数据加密服务(DEW)管理,且仅支持选择与企业项目绑定的密钥。​​功能互斥​​:​​备份加密与跨区域备份互斥​​,二者不能同时启用。​​如何启用备份加密​​进入GaussDB控制台,选择目标实例的​​“备份恢复”​​页面。点击​​“备份加密”​​开关,选择或输入DEW中的密钥ID。开启后,所有​​新增备份​​将自动加密(全量/增量备份均支持)。​​备份恢复的注意事项​​​​恢复操作无需手动解密​​:通过控制台恢复备份时,系统自动解密后执行恢复。​​恢复目标限制​​:加密备份​​仅支持恢复到新实例或原实例​​,不可恢复到其他已有实例。​​总结建议​​​​敏感数据场景​​:务必同时开启​​磁盘加密 + 备份加密​​,确保数据全生命周期安全。​​密钥备份​​:妥善保管加密密钥,避免因密钥失效导致数据不可用。​​功能规划​​:若需跨区域容灾,需在备份加密和跨区域备份间权衡选择。​​参考依据​​:以上结论综合自华为云官方文档对GaussDB磁盘加密、备份加密的详细说明及限制条款。
  • [技术干货] GaussDB分布式独立部署与分布式混合部署有什么区别
    GaussDB分布式独立部署与分布式混合部署有什么区别GaussDB的分布式独立部署与混合部署在架构设计、资源分配、性能表现及适用场景等方面存在显著差异,具体对比如下:​​1. 架构设计与资源分配​​​​独立部署​​​​组件隔离​​:每个核心组件(如CN协调节点、DN数据节点、CMS集群管理、GTM全局事务管理器)均部署在独立的ECS上,资源完全独享,无争抢。​​典型配置​​:以默认3CN+3分片+3副本为例,需18台ECS(3个CN、9个DN、3个CMS、3个GTM)。​​扩展性​​:支持按业务负载灵活调整CN与DN的比例,实现高效组网。​​混合部署​​​​组件共享​​:所有组件(CN、DN等)部署在同一台ECS上,资源共享,存在潜在性能竞争。​​典型配置​​:一主两备形态仅需3台ECS(每台运行多个组件)。​​限制​​:组件耦合度高,无法独立扩缩容特定角色。 ​​2. 性能表现​​​​独立部署​​​​优势​​:资源隔离彻底,无CPU/内存争抢,适合高并发、低延迟场景(如金融交易系统)。​​适用场景​​:大数据量(TB级)、需横向扩展数据容量与并发能力的业务。​​混合部署​​​​劣势​​:多组件共享单机资源,复杂查询或高负载时易出现性能瓶颈,整体性能弱于同规格独立部署。​​适用场景​​:数据量中等、未来可能增长但对实时性要求不高的场景(如测试环境、中小型OA系统)。​​3. 成本与运维复杂度​​​​独立部署​​​​成本高​​:ECS数量多,硬件投入大,适合预算充足的企业。​​运维复杂​​:需管理多台服务器,但故障定位更清晰(组件隔离)。​​混合部署​​​​成本低​​:ECS数量大幅减少(仅为独立部署的1/6),适合成本敏感型业务。​​运维简化​​:组网结构简洁,部署效率高,但故障排查可能因组件耦合而复杂化。​​4. 高可用与扩展性​​​​独立部署​​​​高可用保障​​:支持跨AZ部署(如3AZ多副本),实现RPO=0(零数据丢失)、RTO<60秒的容灾能力。​​弹性扩展​​:支持在线动态扩容至256节点,数据自动重分布,性能线性提升。​​混合部署​​​​容灾限制​​:通常仅支持单AZ部署,跨AZ容灾能力弱。​​扩展瓶颈​​:单机资源限制扩展上限,无法灵活调整组件比例。​​对比总结表​​​​维度​​ ​​独立部署​​ ​​混合部署​​​​资源分配​​ 组件独占ECS,无争抢 多组件共享ECS,存在资源竞争​​性能表现​​ 高并发下稳定,无瓶颈 复杂场景可能出现性能下降​​成本​​ 高(需18台ECS/默认配置) 低(仅需3台ECS/默认配置)​​适用场景​​ 金融核心系统、海量数据高并发场景 中小业务、成本敏感型测试环境​​扩展性​​ 灵活调整CN/DN比例,支持256节点扩容 单机资源限制扩展能力​​高可用​​ 支持跨AZ多活、两地三中心 通常仅单AZ部署选择建议​​​​选独立部署​​:业务需​​高性能+高可靠性​​(如银行交易、实时风控),且预算充足。​​选混合部署​​:业务​​数据量中等+增长平缓​​,优先考虑成本与部署效率(如政企OA、内部管理系统)。​​注意​​:混合部署仅限​​基础版​​实例,企业版需独立部署以满足高阶需求。建议结合业务长期规划与SLA要求综合决策。
  • [技术解读] GaussDB通用型、独享型和鲲鹏独享型性能规格之间的区别是什么
    GaussDB通用型、独享型和鲲鹏独享型性能规格之间的区别是什么GaussDB的通用型、独享型和鲲鹏独享型性能规格在底层架构、资源隔离、适用场景及性能表现等方面存在显著差异。以下是综合华为云官方文档的详细对比分析:​​核心差异概览​​​​规格类型​​ ​​CPU架构​​ ​​资源隔离​​ ​​适用产品版本​​ ​​典型场景​​ ​​最大规格限制​​​​通用型 (1:4)​​ X86 资源共享,存在争抢风险 仅基础版 测试环境、非关键业务 X86: 8U32G​​独享型 (1:4/1:8)​​ X86 完全独享,零资源争抢 基础版/企业版 企业核心业务、高并发生产环境 X86: 128U1024G; ARM: 128U1024G​​鲲鹏独享型 (1:4/1:8)​​ ARM(鲲鹏) 完全独享,零资源争抢 基础版/企业版 信创(XC)场景、国产化替代 ARM: 128U1024G​​详细区别分析​​​​资源隔离与稳定性​​​​通用型​​:​​资源共享​​:底层采用ECS通用计算实例,多个实例复用物理机资源,高负载时可能因资源争抢导致性能波动。​​限制​​:仅支持基础版,不适用于企业版。​​独享型 & 鲲鹏独享型​​:​​资源独占​​:基于增强型计算实例(X86或鲲鹏ARM),实例间物理隔离,无资源争抢,性能稳定。​​适用性​​:支持企业版高级特性(如动态脱敏、防篡改)。​​架构与信创适配​​​​通用型 & 独享型​​:​​X86架构​​:兼容主流软硬件生态,适用于传统业务系统。​​鲲鹏独享型​​:​​ARM架构​​:基于国产鲲鹏芯片,满足信创场景的自主可控要求,但部分规格最大vCPU略低(如最高60核 vs X86的128核)。​​性能参数对比​​​​内存配比​​:​​1:4规格​​:每1核CPU配4GB内存(如8核32GB)。​​1:8规格​​:每1核CPU配8GB内存(如8核64GB),适合内存密集型业务。​​连接数支持​​:独享型1:8规格支持更高并发(如64核独享型默认最大连接数8000,高于通用型)。​​适用场景推荐​​​​通用型​​:​​低成本测试​​:开发测试、非生产环境,成本敏感型业务。​​独享型 (X86)​​:​​核心生产系统​​:金融交易、高并发电商,需高稳定性与扩展性。​​鲲鹏独享型​​:​​国产化替代​​:政务、央企等信创项目,需符合国产化标准。​​特殊限制​​​​通用型​​:不支持企业版,无法使用动态脱敏等高级安全特性。​​鲲鹏独享型​​:部分区域部署受限(如仅华东、华北等特定区域支持)。​​独享型1:8​​:低规格(如4U32G)需白名单申请,且禁止用于生产环境。选型建议​​​​优先选独享型​​:生产环境务必选择​​独享型​​(X86或鲲鹏),保障资源独占性和SLA稳定性。​​信创场景必选鲲鹏​​:政策要求国产化时,选择​​鲲鹏独享型​​,兼顾性能与合规。​​慎用通用型​​:仅限测试或非关键业务,避免资源争抢导致生产事故。注意​​:变更规格需在控制台操作,且部分规格需重启实例(业务中断约1-5分钟)。建议结合长期业务规划与合规要求综合决策。
  • [技术解读] GaussDB应用场景全景解析:从金融核心到物联网的分布式数据库实践
    华为GaussDB以分布式架构突破传统数据库边界,在金融、电信、物联网等关键领域实现国产化替代与性能跃升。作为华为自主研发的分布式关系型数据库,GaussDB凭借​​弹性扩展、多模型融合、金融级高可用​​等特性,已成为支撑企业核心业务系统的重要基础设施。本文结合行业实践,深度解析其核心应用场景与技术实现。一、金融核心系统:高并发交易与实时风控金融行业对数据库的​​一致性、高可用及安全合规​​要求极高,GaussDB通过分布式架构与创新协议设计满足核心业务需求:​​银行核心交易系统​​​​工商银行​​:在信贷、贵金属交易等30余个系统中部署GaussDB,支撑全球7×24小时服务,实现全栈自主创新与RPO=0(零数据丢失)。​​邮储银行​​:新一代个人业务系统处理日均20亿笔交易,峰值达6.7万笔/秒,服务6.5亿客户。​​招商银行​​:承载“掌上生活”与“手机银行”两大App支付业务,峰值TPS 3500,日均请求量8500万。​​实时风控与数仓迁移​​​​毫秒级风险决策​​:通过列存储压缩(Zstandard算法)和并行计算优化,实现5分钟内用户行为分析的实时响应。​​PB级数仓迁移​​:某大型银行将240节点传统数仓迁移至GaussDB,利用并行加载工具(GDS)实现TB/小时的数据导入效率。二、电信与政务:海量数据查询与混合负载​​电信详单分析​​支持PB级话单数据边入库边查询,通过​​内存分析技术​​提升响应速度,满足亿级话单的实时检索需求。跨省结算场景下,通过XA分布式事务协议保障事务一致性,超时自动重试机制降低故障风险。​​平安城市多源异构分析​​​​套牌车识别​​:在6000万过车记录中实现秒级分析,利用列存向量化技术加速查询。​​多源数据融合​​:通过SQL On Anywhere技术直接分析Hadoop数据,避免数据搬迁成本。​​政务大数据安全治理​​动态脱敏、行级访问控制、TDE透明加密满足等保三级要求。两地三中心容灾架构确保数据0丢失,通过Paxos协议实现跨AZ一致性保障。三、物联网时序数据处理:设备监控与实时告警物联网场景需应对高并发写入与实时聚合计算挑战:​​数据存储优化​​时序分区表按时间分桶(如1小时),自动压缩(LZ4算法)降低90%存储成本。设备元数据采用行存储(Row-Based),传感器数据采用列存储(Column-Based),平衡更新与查询效率。​​实时异常检测​​– 5分钟内温度异常设备检测(并行聚合)SELECT device_id, AVG(temperature) FROM device_metrics WHERE metric_time > NOW() - INTERVAL '5 minutes' GROUP BY device_id HAVING MAX(temperature) > 40 PARALLEL 16; -- 启用16线程并行计算 四、技术架构解析:分布式设计的核心优势​​分布式无共享架构​​​​计算存储分离​​:Coordinator Node解析查询,Data Node分布式执行,通过Paxos协议保障数据一致性。​​弹性扩缩容​​:支持在线扩容至2048节点,PB级数据业务不中断。​​HTAP混合负载能力​​行列混存引擎兼顾OLTP与OLAP,物化视图实现交易数据的实时统计,避免ETL延迟。​​高可用与安全​​​​同城双活​​:3AZ部署(2业务AZ+1仲裁AZ),Quorum协议保证单AZ故障时RPO=0。​​全链路加密​​:数据传输、计算、存储加密,通过CC EAL4+国际安全认证(国内最高级别)。五、未来演进:云原生与AI驱动的智能化GaussDB正加速向云原生与智能化演进:​​Serverless架构​​:按需分配计算资源,降低小型业务成本。​​AI自治运维​​:自动索引生成、执行计划预测,提升复杂查询性能。​​流批一体​​:集成Flink实现端到端实时分析,支持物联网设备数据流即时处理。结语:国产数据库的生态突围GaussDB已在全球60个国家服务1500余家客户,覆盖金融、政务、能源等关键领域。其成功印证了分布式架构对传统集中式数据库的替代可行性,也标志着国产数据库在​​性能、安全、扩展性​​上实现全面突破。未来随着AI与云原生的深度融合,GaussDB将持续推动企业核心系统的智能化升级,为数字经济提供坚实底座。作者:如鱼得水
  • 服务器断电重启后GaussDB集群无法启动
    2025-07-05 17:30:17.539 tid=821240 DEBUG1: CmServer_conn is null. 2025-07-05 17:30:18.542 tid=821240 DEBUG1: 226 : connect to cmserver failed: could not connect to server: Is the server running on host "192.168.1.166" and accepting TCP/IP connections on port 30200?
  • omm没有权限,无法安装omagent
    MainThread 2025-07-05 09:59:24,464 [INFO] AgentConfig(config:295) The handler object count of om_agent logger: [1]. om_agent_install 2025-07-05 09:59:24,834 [INFO] do_config(config:448) The all path of cluster is: ['/data/cluster/package', '/data/cluster/tools', '/data/cluster/core/app', '/data/cluster/temp', '/data/cluster/logs/gaussdb', '/data/cluster/CA', '/data/cluster/data/cm', '/data/cluster/data/etcd', '/data/cluster/data/gtm', '/data/cluster/data/cn', '/data/cluster/data/dn'] om_agent_install 2025-07-05 09:59:24,835 [INFO] <module>(install:699) ****************************** [Begin]:Install agent application. om_agent_install 2025-07-05 09:59:24,924 [INFO] <module>(install:705) current host ip: 192.168.1.166 om_agent_install 2025-07-05 09:59:25,359 [INFO] check_environment_type(install:686) Current pg host value is , gauss env value is . om_agent_install 2025-07-05 09:59:25,360 [WARNING] check_environment_type(install:688) Environment variables PGHOST and GAUSS_ENV do not exist. om_agent_install 2025-07-05 09:59:25,360 [INFO] <module>(install:721) Warning: no ca_passwd parameter provided, the CLS log_agent process will not running! om_agent_install 2025-07-05 09:59:25,447 [INFO] <module>(install:779) Install agent: version[6fe6aebc]. om_agent_install 2025-07-05 09:59:25,447 [INFO] installAgent(install:393) Install agent app. om_agent_install 2025-07-05 09:59:25,535 [INFO] stopCrontab(install:536) cmd: python3 /data/GaussDBInstaller/pkgDir/omagent/agent/mgr/setUserCron.py -t del 'om_agent.py' && python3 /data/GaussDBInstaller/pkgDir/omagent/agent/mgr/setUserCron.py -t del 'check_agent.py' MainThread 2025-07-05 09:59:25,573 [INFO] AgentConfig(config:295) The handler object count of om_agent logger: [1]. MainThread 2025-07-05 09:59:25,575 [DEBUG] del_cron(setUserCron:71) del old cron... om_agent_install 2025-07-05 09:59:25,583 [INFO] <module>(install:802) install agent failed.error = Traceback (most recent call last): File "/data/GaussDBInstaller/pkgDir/omagent/agent/mgr/install.py", line 781, in <module> installAgent() File "/data/GaussDBInstaller/pkgDir/omagent/agent/mgr/install.py", line 400, in installAgent stopCrontab() File "/data/GaussDBInstaller/pkgDir/omagent/agent/mgr/install.py", line 540, in stopCrontab + "Error: %s" % output)) Exception: [GAUSS-61101] : Failed to do Clear crontabError: Traceback (most recent call last): File "/data/GaussDBInstaller/pkgDir/omagent/agent/mgr/setUserCron.py", line 161, in <module> cron.del_cron() File "/data/GaussDBInstaller/pkgDir/omagent/agent/mgr/setUserCron.py", line 75, in del_cron crontab_str = self.get_old_cron() File "/data/GaussDBInstaller/pkgDir/omagent/agent/mgr/setUserCron.py", line 62, in get_old_cron status, result, err_info = exe_cmd(get_cron_cmd, ignore_error=True) File "/data/GaussDBInstaller/pkgDir/omagent/agent/mgr/setUserCron.py", line 33, in exe_cmd proc = Popen(command, shell=False, stdout=PIPE, universal_newlines=True, stderr=PIPE) File "/usr/lib64/python3.7/subprocess.py", line 944, in __init__ start_new_session) File "/usr/lib64/python3.7/subprocess.py", line 1773, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) PermissionError: [Errno 13] Permission denied: 'crontab' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/data/GaussDBInstaller/pkgDir/omagent/agent/mgr/setUserCron.py", line 170, in <module> raise Exception(str(e)) Exception: [Errno 13] Permission denied: 'crontab'.
  • GaussDB作为华为自主研发的分布式关系型数据库,凭借其全栈技术创新和行业深度实践,在关键领域展现出显著优势
    GaussDB作为华为自主研发的分布式关系型数据库,凭借其全栈技术创新和行业深度实践,在关键领域展现出显著优势。以下是其核心产品优势的体系化解析:​​一、全栈自主与高安全​​​​核心代码100%自研​​基于华为20余年数据库研发积累,从芯片、操作系统到数据库实现全栈自主可控,彻底摆脱对国外技术的依赖。​​金融级安全防护​​​​全密态技术​​:数据在存储、传输、计算全程加密,支持国密算法,密钥由用户独立管理,即使数据库管理员也无法访问明文。​​国际最高认证​​:国内首个获得CC EAL4+安全认证的数据库,通过工信部防篡改数据库28项能力测试。​​动态防御​​:集成SQL注入拦截、MFA多因素认证、IP白名单等机制,抵御暴力破解和未授权访问。​​二、极致性能与高弹性​​​​分布式架构优化​​​​GTM-Lite技术​​:无中心节点瓶颈,实现分布式事务强一致性,32节点集群吞吐量达​​1500万tpmC​​(事务处理性能基准)。​​向量化执行引擎​​:利用SIMD指令集批量处理数据,复杂查询响应速度提升3-5倍。​​弹性扩展能力​​支持​​秒级在线扩容​​,最大支持1000+节点横向扩展,数据自动重分布,业务无感知。PB级数据量下仍保持线性性能增长,应对电商大促、物联网海量数据场景游刃有余。​​三、高可用与容灾能力​​​​双集群强一致方案​​国内唯一实现跨AZ(可用区)双活集群,RPO=0(零数据丢失),故障切换时间​​<2分钟​​,较传统方案效率提升10倍。​​多层级容灾架构​​同城跨AZ:数据实时同步,分钟级恢复。两地三中心:支持1000公里级异地容灾,保障金融、政务系统连续性。​​场景​​ ​​传统方案恢复时间​​ ​​GaussDB恢复时间​​集群级故障 15-30分钟 ≤2分钟城市级灾难 数小时 ≤10分钟数据源自工商银行、邮储银行核心系统实践​​四、智能运维与易用性​​​​AI-Native数据库​​智能优化器自动重写低效SQL,诊断效率提升​​5倍​​(如邮储银行故障分析)。支持索引推荐、负载预测,减少人工调优成本。​​平滑迁移与轻量化部署​​​​Oracle兼容性​​:语法自动转换率达95%,通过DRS工具实现数据在线迁移,业务零中断。​​资源高效利用​​:1主1备1日志轻量部署,资源消耗降低​​30%​​;多租户隔离技术提升资源利用率4倍。​​五、行业验证与生态成熟度​​​​金融级核心场景验证​​支撑工商银行信贷系统(5A级)、邮储银行核心系统(6.5亿用户,峰值6.7万笔/秒),交易耗时降低30%。华为MetaERP系统切换后,订单处理从23分钟压缩至​​9秒​​。​​开放生态与工具链​​提供DAS(数据库管理)、UGO(迁移评估)、DRS(数据同步)等全套工具,并开源主备版,吸引开发者生态共建。​​总结:GaussDB的核心竞争力​​​​安全可信​​:全栈自主+全密态加密,满足金融/政企严苛要求。​​性能颠覆​​:分布式架构+AI优化,吞吐量领先同业。​​平滑替代​​:Oracle生态无缝迁移,降低国产化门槛。​​场景适配​​:从金融核心到物联网海量数据,覆盖企业级全场景。华为内部及多个千亿级金融系统的规模化验证,印证了GaussDB作为“数字底座”的可靠性。在数据库自主化浪潮中,其技术深度与生态成熟度已形成显著壁垒。GaussDB的分布式架构具体如何实现高性能和高可用?GaussDB在金融行业有哪些典型应用案例?GaussDB与其他国产数据库相比有哪些差异化优势?
  • GaussDB权限管理
    GaussDB权限管理:从RBAC到精细化控制的企业级安全实践在数据驱动的数字化转型浪潮中,数据库权限管理已成为企业数据安全的生命线。华为GaussDB作为分布式数据库的领军者,通过​​多层权限模型​​与​​动态审计机制​​,构建了兼顾灵活性与安全性的访问控制体系。本文将深入解析其技术原理、实操方案与行业级应用场景。一、权限模型解析:四层架构与核心机制​​角色与用户的关系​​​​角色(Role)​​:权限集合容器,无登录权限(如analyst_role)​​用户(User)​​:具有登录权限的实体,通过角色继承权限(如GRANT analyst_role TO alice)​​转换机制​​:ALTER ROLE analyst_role LOGIN可使角色获得用户属性​​四层权限模型​​​​系统权限​​:控制全局能力(如SUPERUSER、CREATEDB)​​数据库权限​​:隔离连接访问(GRANT CONNECT ON DATABASE finance)​​模式权限​​:控制对象创建(GRANT CREATE ON SCHEMA sales)​​对象权限​​:细粒度操作控制(表、列、函数权限)​​权限继承机制​​​​角色继承​​:子角色自动获得父角色权限(需WITH GRANT OPTION)​​对象继承​​:子表继承父表权限(需启用INHERIT选项)​​级联回收​​:删除父角色时,子角色权限自动失效二、权限操作实战:从基础配置到高级控制用户与角色管理-- 创建带资源限制的用户(连接数+内存配额) CREATE USER finance_user WITH PASSWORD 'Secure@2025!' CONNECT LIMIT 10 MEMORY QUOTA 2GB; [1] -- 创建审计管理员角色 CREATE ROLE audit_admin WITH AUDITADMIN; [4]精细化权限分配-- 列级权限控制(仅开放非敏感字段) GRANT SELECT (id, order_date) ON orders TO report_role; [3] -- 动态数据掩码(隐藏邮箱明文) GRANT SELECT (user_id, MASK(email,'***')) ON users TO support_role; [3]权限回收策略-- 级联回收所有表权限 REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA sales FROM temp_role CASCADE; [3] -- 临时冻结账户(模拟离职场景) ALTER USER leaved_user VALID UNTIL '2025-12-31'; [2]三、企业级应用场景设计​​金融行业合规架构​​-- 柜员角色:仅能查询余额字段 CREATE ROLE teller; GRANT SELECT (account_balance) ON accounts TO teller; -- 审计角色:禁止数据操作但可部署策略 CREATE ROLE audit_admin; REVOKE ALL ON DATABASE finance FROM audit_admin; [3]​​多租户数据隔离​​-- 租户专属模式与搜索路径绑定 CREATE SCHEMA tenant_a; ALTER USER tenant_a_admin SET search_path TO tenant_a; -- 禁止跨模式访问 REVOKE SELECT ON ALL TABLES IN SCHEMA public FROM tenant_a_admin; [2,5]​​物联网数据分级​​-- 原始数据仅运维可访问 GRANT SELECT ON sensor_raw TO ops_role; -- 分析师访问脱敏聚合视图 CREATE VIEW sensor_analytics AS SELECT device_id, AVG(temperature) FROM sensor_raw GROUP BY device_id; GRANT SELECT ON sensor_analytics TO analyst_role; [3]四、安全增强与风险防控​​动态安全策略​​​​行级安全(RLS)​​:按属性过滤数据CREATE POLICY dept_policy ON employeesFOR SELECT USING (dept_id = current_user_dept); [3]​​上下文感知​​:基于时间/位置动态拦截非合规访问​​审计与监控​​启用全操作审计:ALTER SYSTEM SET audit_level = ‘VERBOSE’;实时登录监控:对失败登录触发NOTIFY alert_channel定期权限巡检:检测过度授权账号​​外部身份集成​​LDAP/AD统一认证:# postgresql.conf配置 ldap_servers = ldap://ldap.example.com:389 ldap_bind_dn = cn=admin,dc=example,dc=com [2]五、最佳实践​​核心原则​​​​最小权限原则​​:禁止GRANT ALL PRIVILEGES,按需分配权限​​角色中心化​​:通过角色批量管理权限,避免直接操作用户​​定期清理​​:自动删除90天未登录账户​​典型风险应对​​风险类型 解决方案权限残留(离职员工) 自动账户冻结策略公共模式权限溢出 REVOKE ALL ON SCHEMA public FROM PUBLIC超级用户滥用 启用三权分立(enableSeparationOfDuty=on)​​智能化演进​​​​AI权限建议​​:基于SQL日志生成最小权限策略​​Serverless权限​​:按需生成临时凭证(如1小时有效令牌)结语GaussDB的权限管理体系将​​RBAC的灵活性​​与​​精细化控制能力​​深度融合,通过四层权限模型、动态策略和智能审计,为金融、医疗等高敏场景提供企业级保障。随着AI驱动的权限优化和Serverless临时凭证等技术的发展,权限管理正从静态配置走向智能动态化。实践中需牢记:​​权限即信任,最小化是黄金法则​​,而持续审计则是安全闭环的最终防线。更多技术细节可参考GaussDB 层级权限管理官方指南。
  • [用户实践] PostgreSQL与GaussDB中SET SESSION AUTHORIZATION的深度对比
    PostgreSQL与GaussDB中SET SESSION AUTHORIZATION的深度对比前言在数据库管理中,用户身份切换是一个重要的安全功能。SET SESSION AUTHORIZATION语句允许具有适当权限的用户临时更改会话的用户身份。然而,PostgreSQL和GaussDB在实现这一功能时存在显著差异,这些差异可能会影响应用程序的行为和安全策略。本文将深入分析这两个数据库系统在SET SESSION AUTHORIZATION实现上的异同。基本语法差异PostgreSQL语法-- 标准语法 SET SESSION AUTHORIZATION user_name; -- 恢复到原始用户 SET SESSION AUTHORIZATION DEFAULT; GaussDB语法-- 扩展语法,需要密码验证 SET SESSION AUTHORIZATION user_name PASSWORD 'password'; -- 恢复到原始用户 SET SESSION AUTHORIZATION DEFAULT; 关键差异:PostgreSQL只需要指定用户名GaussDB需要提供目标用户的密码,增加了额外的安全验证层权限检查机制的核心差异这是两个系统最重要的差异,直接影响了用户切换的行为模式。PostgreSQL的权限检查机制PostgreSQL基于初始认证用户(original authenticated user)进行权限检查:-- 假设以superuser身份连接数据库 -- 初始用户:superuser(具有超级用户权限) SET SESSION AUTHORIZATION "user1"; -- ✅ 成功,基于初始用户superuser的权限 -- 当前会话用户:user1,但权限检查仍基于初始用户superuser SET SESSION AUTHORIZATION "user2"; -- ✅ 仍然成功,因为初始用户是superuser -- 当前会话用户:user2 SET SESSION AUTHORIZATION "user3"; -- ✅ 继续成功,可以无限次切换 GaussDB的权限检查机制GaussDB基于当前会话用户的权限进行检查:-- 假设以superuser身份连接数据库 -- 初始用户:superuser(具有超级用户权限) SET SESSION AUTHORIZATION "user1" PASSWORD 'password1'; -- ✅ 成功 -- 当前会话用户:user1(普通用户,无超级用户权限) SET SESSION AUTHORIZATION "user2" PASSWORD 'password2'; -- ❌ 失败! -- 错误:permission denied to set session authorization -- 原因:当前用户user1没有超级用户权限 搜索路径(Search Path)处理差异PostgreSQL的搜索路径行为PostgreSQL在执行SET SESSION AUTHORIZATION后不会改变当前会话的search_path:-- 显示当前搜索路径 SHOW search_path; -- 输出:public, schema1 -- 切换用户 SET SESSION AUTHORIZATION "user1"; -- 搜索路径保持不变 SHOW search_path; -- 输出:public, schema1(unchanged) -- 因此可以访问之前可见的对象 GRANT SELECT ON table1 TO "user2"; -- ✅ 成功,table1仍然可见 GaussDB的搜索路径行为GaussDB在切换用户时可能会重新评估用户的环境设置:-- 显示当前搜索路径 SHOW search_path; -- 输出:public, schema1 -- 切换用户 SET SESSION AUTHORIZATION "user1" PASSWORD 'password1'; -- 搜索路径可能发生变化 SHOW search_path; -- 输出:public(可能已变更为user1的默认设置) -- 之前可见的对象可能变得不可见 GRANT SELECT ON table1 TO "user2"; -- ❌ 可能失败,table1: relation does not exist 实际应用场景中的差异表现场景1:连续用户切换PostgreSQL:-- 以superuser身份连接 SET SESSION AUTHORIZATION "app_user"; -- 执行业务操作 GRANT SELECT ON orders TO "report_user"; -- 切换到另一个用户 SET SESSION AUTHORIZATION "admin_user"; -- 执行管理操作 GRANT ALL ON users TO "app_user"; -- 可以继续切换 SET SESSION AUTHORIZATION "audit_user"; -- 执行审计操作 GaussDB:-- 以superuser身份连接 SET SESSION AUTHORIZATION "app_user" PASSWORD 'app_password'; -- 执行业务操作 GRANT SELECT ON public.orders TO "report_user"; -- 需要使用完全限定名 -- 尝试切换到另一个用户 SET SESSION AUTHORIZATION "admin_user" PASSWORD 'admin_password'; -- ❌ 失败:permission denied to set session authorization -- 解决方案:先恢复到原始用户 RESET SESSION AUTHORIZATION; SET SESSION AUTHORIZATION "admin_user" PASSWORD 'admin_password'; 场景2:对象访问权限PostgreSQL:-- 表table1存在于schema1中,当前search_path包含schema1 SET SESSION AUTHORIZATION "user1"; GRANT SELECT ON table1 TO "user2"; -- ✅ 成功 GaussDB:-- 同样的条件 SET SESSION AUTHORIZATION "user1" PASSWORD 'password1'; GRANT SELECT ON table1 TO "user2"; -- ❌ 可能失败:relation "table1" does not exist -- 解决方案:使用完全限定名 GRANT SELECT ON schema1.table1 TO "user2"; -- ✅ 成功 安全影响分析PostgreSQL的安全模型优势:灵活性高,便于管理和脚本化操作风险:一旦获得超级用户权限,可以无限制地切换用户身份适用场景:信任环境,需要频繁切换用户的管理任务GaussDB的安全模型优势:更严格的权限控制,防止权限提升攻击限制:灵活性相对较低,需要更多的权限管理适用场景:高安全要求的环境,需要严格的访问控制最佳实践建议针对PostgreSQL谨慎使用超级用户权限:-- 避免长期以超级用户身份运行应用 -- 使用专用的管理脚本进行用户切换 明确记录搜索路径:-- 在切换用户前记录当前环境 SHOW search_path; SET SESSION AUTHORIZATION "target_user"; -- 验证环境是否符合预期 针对GaussDB使用完全限定名:-- 推荐使用schema.object的完整路径 GRANT SELECT ON myschema.mytable TO "user"; 管理用户切换策略:-- 方案1:使用RESET恢复原始用户 SET SESSION AUTHORIZATION "user1" PASSWORD 'password1'; -- 执行操作 RESET SESSION AUTHORIZATION; SET SESSION AUTHORIZATION "user2" PASSWORD 'password2'; -- 方案2:使用不同的连接会话 -- 为不同的用户操作建立独立的数据库连接 设置合适的搜索路径:-- 在用户切换后显式设置搜索路径 SET SESSION AUTHORIZATION "user1" PASSWORD 'password1'; SET search_path TO myschema, public; 迁移注意事项如果你正在从PostgreSQL迁移到GaussDB,或者需要编写兼容两个系统的应用程序,请注意:语法适配:-- PostgreSQL风格 SET SESSION AUTHORIZATION "user1"; -- GaussDB风格 SET SESSION AUTHORIZATION "user1" PASSWORD 'password1'; 权限检查逻辑:-- 设计时考虑GaussDB的限制 -- 避免连续的用户切换操作 -- 使用RESET SESSION AUTHORIZATION作为中间步骤 对象引用:-- 使用完全限定名以确保兼容性 GRANT SELECT ON schema.table TO "user"; 总结PostgreSQL和GaussDB在SET SESSION AUTHORIZATION的实现上体现了不同的设计理念:PostgreSQL注重灵活性和便利性,基于初始认证用户的权限模型使得用户切换更加自由GaussDB注重安全性和严格控制,基于当前会话用户的权限模型提供了更强的安全保障
  • [用户实践] PostgreSQL vs openGauss:嵌套事务隔离级别行为对比
    背景在数据库开发中,事务的隔离级别(Isolation Level)直接影响并发一致性。 PostgreSQL 和 openGauss 都支持多种隔离级别,但它们在嵌套事务(如 savepoint 或子事务)中更改隔离级别时,行为有明显差异。实验脚本我们用如下 SQL 脚本分别在 PostgreSQL 和 openGauss 上测试:SELECT version();BEGIN ISOLATION LEVEL REPEATABLE READ;SELECT 'Outer: ' || current_setting('transaction_isolation') AS isolation_level_outer;SAVEPOINT sp1;SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;SELECT 'Inner: ' || current_setting('transaction_isolation') AS isolation_level_inner;ROLLBACK;PostgreSQL 的表现在 PostgreSQL 上,执行 SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; 时会报错:ERROR: SET TRANSACTION ISOLATION LEVEL must be called before any query原因: PostgreSQL 不允许在一个已开启的事务或 savepoint 中更改隔离级别,必须在事务开始前设置。openGauss 的表现在 openGauss 上,执行同样的脚本不会报错,而且隔离级别会被更改: isolation_level_outer  -----------------------  repeatable read (1 row)  isolation_level_inner  -----------------------  serializable (1 row)原因: openGauss 允许在 savepoint 或嵌套事务中更改隔离级别,且会立即生效。总结对比数据库嵌套事务更改隔离级别行为PostgreSQL不允许报错openGauss允许正常切换PostgreSQL 更加严格,要求隔离级别在事务开始前确定。openGauss 更加灵活,允许在事务进行中切换隔离级别。
总条数:1539 到第
上滑加载中