ITPub博客

首页 > 数据库 > 国内数据库 > 数据库教程FGMT83:国产数据库-华为高斯GaussDB(DWS)数据库培训

数据库教程FGMT83:国产数据库-华为高斯GaussDB(DWS)数据库培训

原创 国内数据库 作者:mfkqwyc86 时间:2026-11-10 12:13:36 0 删除 编辑

数据库教程FGMT83:国产数据库-华为高斯GaussDB(DWS)数据库培训(PB级超大规模分布式数据仓库平台)


> 

> 本套风哥教程基于华为高斯 GaussDB(DWS) 分布式数据仓库平台,面向运维人员、数据库工程师与开发人员,覆盖产品架构、部署方案、集群安装配置与日常维护管理全流程。风哥教程本文所有命令均在 64GB 内存、8 vCPU 的双节点实验环境(主机名 fgedu-net-cn1、fgedu-net-cn2)下验证,安装根目录统一为 /fgedudb,数据库名、实例名均为 fgedudb,业务用户名为 fgedu。


## 一、前言与教程内容大纲介绍


在企业数字化进入深水区之后,业务系统沉淀下来的明细数据已经从 TB 级走向 PB 级。传统的单机关系型数据库在面对亿级行表的多维聚合、大表关联、年度报表与实时决策时,往往会出现 CPU 打满、内存不足、查询跑批数小时仍无法出结果的瓶颈。华为高斯 GaussDB(DWS) 正是为解决这一类超大规模分析型负载而设计的 MPP(Massively Parallel Processing,大规模并行处理)分布式数据仓库平台,它把一张逻辑上的大表水平拆分到多个数据节点上,让查询任务被推送到数据所在位置就近并行执行,从而把"一台机器扛全部"变成"一群机器一起算"。


风哥教程本文的定位是一套可以直接对照操作的工程化教程,而不是产品宣传材料。风哥在编写过程中刻意弱化市场表述,把笔墨集中在架构原理与可落地的命令操作上。本套风哥教程的内容比例遵循"少量理论打底、大量实战落地"的原则:前言与大纲介绍约占全篇的 5%,体系架构与原理理论约占 30%,环境准备、安装配置、日常维护等实战操作约占 60%,最后由风哥针对本文做总结约占 5%。


风哥教程本文的内容大纲如下,共分为四大板块:


第一板块,华为高斯 GaussDB 数据库基础架构,包括 GaussDB 数据库产品介绍、GaussDB(DWS) 数据库介绍、GaussDB(DWS) 数据库应用场景、GaussDB(DWS) 数据库应用案例、GaussDB(DWS) 数据库技术特点、GaussDB(DWS) 数据库体系架构六个知识点。


第二板块,华为高斯 GaussDB 数据库部署方案与环境准备,包括硬件规格选型、操作系统基线、内核与资源参数、数据库用户与目录规划、节点互信与时间同步、集群部署 XML 规划。


第三板块,华为高斯 GaussDB 数据库集群安装配置,包括安装包上传与解压、操作系统预检查、集群 XML 配置编写、gs_install 静默安装、集群初始化与S首启动、集群状态核验。


第四板块,GaussDB(DWS) 数据库日常维护管理,包括 GaussDB(DWS) 数据库日常检查、GaussDB(DWS) 集群启动停止与基本维护、GaussDB(DWS) 认证配置与远程登录、GaussDB(DWS) 集群参数修改、GaussDB(DWS) 集群表的创建与使用。


需要提前说明的是,风哥教程本文的实验环境为两个节点(fgedu-net-cn1、fgedu-net-cn2),主要用于讲清安装、启停、认证、参数与建表的操作链路;生产环境出于高可用考虑,CN/DN 通常采用三副本主备从部署,节点数一般不少于三,这一点在后续架构理论与实战注释中风哥会反复提示。


## 二、GaussDB 数据库基础架构(理论部分)


### 2.1 GaussDB 数据库产品介绍


GaussDB 是华为自主研发的企业级数据库产品族,理解 GaussDB(DWS) 之前,必须先厘清 GaussDB 家族的产品分层,否则很容易把 openGauss、GaussDB(分布式事务版)与 GaussDB(DWS) 混为一谈。


GaussDB 产品族大致可以分为四条产品线。第一条是开源单机/主备内核 openGauss,它以 PostgreSQL 内核为基础做了大量增强,采用木兰宽松许可证,常用于自建开源数据库与二次开发。第二条是面向 OLTP(联机事务处理)的 GaussDB 分布式版,强调分布式事务、强一致、高并发短事务,支撑银行核心系统这类"写得多、单次小"的业务。第三条就是本套风哥教程的主角 GaussDB(DWS),DWS 是 Data Warehouse Service 的缩写,即数据仓库服务,它面向 OLAP(联机分析处理)与混合负载,强调大表扫描、多维聚合、批量加载与 PB 级扩展。第四条是云原生的 GaussDB(for MySQL)、GaussDB(for Redis)、GaussDB(for Mongo) 等托管型兼容产品,分别兼容 MySQL、Redis、MongoDB 协议。


风哥在这里强调一个判断标准:OLTP 看"事务吞吐与点查",OLAP 看"扫描吞吐与并行聚合"。选型错配是很多项目翻车的根源——把 DWS 当成高频交易库去写短事务,或者把 OLTP 库当成数仓去跑年度大报表,都会事倍功半。


### 2.2 GaussDB(DWS) 数据库介绍


GaussDB(DWS) 是一款具备分析及混合负载能力的分布式数据库,支持 x86 与鲲鹏(Kunpeng)硬件架构,支持行存储与列存储,提供 PB 级数据分析能力、多模分析能力与实时处理能力,用于数据仓库、数据集市、实时分析、实时决策与混合负载(HTAP)等场景。


在 SQL 兼容性上,GaussDB(DWS) 兼容 ANSI/ISO 标准的 SQL92、SQL99、SQL2003 语法,同时兼容 PostgreSQL、Oracle、Teradata、MySQL 等数据库生态。这意味着迁移成本主要落在方言改写与函数映射上,而不是推倒重来。它内置了 SQL 语法迁移工具 DSC(Database Schema Convertor)、数据并行加载工具 GDS(General Data Service)、SQL 开发工具 Data Studio,以及基于 OBS 对象存储的集群快照自动备份能力。


从部署形态看,GaussDB(DWS) 既可以在华为云上以托管服务形式开通,也支持物理机/私有化本地部署。本套风哥教程采用的是离线私有化部署路线,因为风哥的学员大量来自金融、政府、运营商等要求数据不出内网的单位,离线安装是必须掌握的能力。


> 

> 风哥 itpux-com


### 2.3 GaussDB(DWS) 数据库应用场景


结合大纲,DWS 的典型应用场景可以归纳为四类。


第一类是详单查询。运营商、银行、电商每天产生海量通话详单、交易流水、订单明细,单表往往达到数十亿行,按手机号、账户、时间区间做条件检索与汇总,是 DWS 最经典的主战场。这类场景要求单列高吞吐扫描与列存压缩。


第二类是企业数据仓库。把各业务系统的 ETL 结果统一汇入数仓,在 DWS 上建设 ODS、DWD、DWS、ADS 分层,支撑财务报表、经营分析、BI 可视化,这是 MPP 数仓的标准用途。


第三类是混合负载(HTAP)。同一套集群既要承接一定量的实时写入与小查询,又要跑批量分析,DWS 通过 WLM 工作负载管理与资源池隔离不同负载,避免大查询把在线会话拖垮。


第四类是大数据分析与实时决策。配合 GDS、Kafka 接入与实时入库能力,对日志、IoT 设备流、用户行为流做近实时分析,支撑风控、推荐、实时大屏等场景。


### 2.4 GaussDB(DWS) 数据库应用案例


在行业落地上,GaussDB(DWS) 广泛应用于金融、泛政府、电信、交通、能源、医疗与电商。国有大型商业银行、头部保险公司、省级运营商、电力调度与政务大数据平台是其主要客户群体。这些案例的共同特征是:数据量大、合规要求高、不能接受数据出域、对查询结果的时效性有明确 SLA。风哥在教学中通常会提醒学员,案例只能说明"能力被验证过",不能直接照搬容量,真正的容量评估必须回到自身数据规模、增量速率、查询并发与保留周期上做测算。


### 2.5 GaussDB(DWS) 数据库技术特点


GaussDB(DWS) 的技术特点可以从五个维度理解。


其一,MPP 大规模并行处理引擎。集群由众多拥有独立且互不共享 CPU、内存、存储资源的逻辑节点组成,即 s-hared-nothing(无共享)架构。业务数据被水平分布到多个节点,查询计划被切片下发到各节点并行执行,最后由协调节点汇聚结果。


其二,行列双存储。行存表适合点查与频繁更新,列存表把同一列的数据连续存放、配合压缩与向量化执行,适合大表扫描与聚合。DWS 还支持 H-Store 存储引擎面向高吞吐实时写入做优化。


其三,高可用主备从三副本机制。每个 DN 采用主、备、从备结构:主备同步期间主 DN 故障,备 DN 升主;新主会把日志同步到从备;原主恢复后以从备日志补齐数据并降回备。从备不额外占存储,相比传统三副本节约约三分之一存储空间。


> 

> 风哥教程 113257174


其四,资源管理与工作负载隔离。以资源池(Resource Pool)为资源承载单位,为不同业务创建不同资源池并配置 CPU、内存、IO、存储占比,再把数据库用户绑定到资源池,实现业务间资源隔离,配合 CCN(中央协调节点)做全局自适应负载控制。


其五,弹性扩展与湖仓一体。存算一体架构下增加节点即可水平扩容;存算分离架构把数据放到 OBS,计算节点独立伸缩,并支持外部表、数据湖格式读写与内外表关联。


### 2.6 GaussDB(DWS) 数据库体系架构


这一节是理论部分的核心,风哥把集群逻辑架构里的六个模块逐一讲清楚,后面实战里的每一条命令都能对应回这些模块。


**CM(Cluster Manager,集群管理模块)**:管理和监控集群中各功能单元与物理资源的运行情况,保证系统稳定。CM 由 CM Agent、OM Monitor、CM Server 组成。CM Agent 部署在每台主机上,监控本机主备 GTM、CN、主备 DN 的状态并上报 CM Server,同时执行 CM Server 下发的仲裁指令;OM Monitor 是看护 CM Agent 的定时任务,CM Agent 异常停止时负责把它拉起;CM Server 根据上报状态判定是否需要修复并下发指令,且提供主备双实例,主 CM Server 故障时备库主动升主,避免管理面单点。


**GTM(Global Transaction Manager,全局事务管理器)**:生成并维护全局事务 ID、事务快照、时间戳等全局唯一信息。整个集群只有一组 GTM,主、备各一个。


**WLM(Workload Manager,工作负载管理器)**:控制系统资源分配,防止过量负载冲击导致业务拥塞与系统崩溃。WLM 不需要在安装时指定主机,安装程序自动在各主机部署。


**CN(Coordinator,协调节点)**:接收应用请求并返回结果,负责分解任务、调度任务分片在各 DN 上并行执行。集群中多个 CN 角色对等,连接任意 CN 执行 DML 都能得到一致结果;CN 与应用之间通常加负载均衡器实现透明访问,CN 故障时由负载均衡把连接路由到其他 CN。分布式事务框架下 CN 之间无法完全避免互连,建议 CN 数量不超过 10 个。CM 在S首启动时选择编号最小的 CN 作为 CCN(Central Coordinator,中央协调节点),CCN 故障后由 CM 重新选替。


**DN(Datanode,数据节点)**:负责存储业务数据(行存、列存、混合)、执行查询任务并向 CN 返回结果。每个 DN 只存一部分数据,采用主、备、从备高可用结构。


**Storage(存储)**:服务器本地存储资源,持久化保存数据。存算一体架构下数据在 DN 本地盘;存算分离架构下本地盘只做缓存与元数据,用户数据落在 OBS。


从数据库逻辑对象看,一个 Cluster 下有多个相互隔离的 Database;每张 Table 只属于一个 Database;每张表通常对应一个或多个 Datafile Segment(单表超过 1GB 会拆成多个数据文件);数据库管理的最小单位是 Block,默认大小 8KB。


数据有三种分布方式,在建表时通过 DISTRIBUTE BY 指定:HAs-h(按分布列哈希取模把行散列到各 DN,最常用,要求分布列高基数以避免倾斜)、REPLICATION(每个 DN 都存一份完整副本,适合小维表,换取关联时免数据重分布)、ROUNDROBIN(轮询分发,行依次落到不同 DN,适合无合适分布列的中间结果表)。


物理架构上分存算一体(s-hared-nothing,数据在 DN 本地盘)与存算分离(s-hared-data,数据在 OBS,本地盘做缓存)两类。逻辑上还可以基于 Node Group 机制划分逻辑集群(VW,Virtual Warehouse),把物理节点切给不同业务使用,进一步隔离资源。


### 2.7 分布式 SQL 执行原理


理解架构之后,还要理解一条 SQL 在集群里是怎么跑起来的,这是后面看执行计划、做调优的基础。


应用把 SQL 发给 CN。CN 上的优化器先做语法解析、语义分析与代价估算,生成一棵分布式执行计划树。这棵计划树会被切片下发到各个 DN:扫描、过滤、本地聚合这类算子在数据所在的 DN 上并行执行;当关联键与两表分布列不一致时,数据需要在节点间流动,这一步由 Streaming 算子完成。


Streaming 主要有三种形态。第一种是重分布(Redistribute / Has-hMove),两表都按不同列哈希分布做关联时,按关联键重新哈希把数据搬到对应 DN。第二种是广播(Broadcast),把小表完整复制到每个 DN,适合小维表关联大事实表,避免大表移动。第三种是本地聚合(Local Aggregation),各 DN 先做部分聚合,CN 再做最终聚合,减少跨节点传输量。


> 

> 风哥数据库教程 itpux-com


CN 在执行末尾负责汇聚各 DN 的结果并返回给客户端。写事务(INSERT/UPDATE/DELETE)在 GTM 的全局事务协调下采用两阶段提交:各 DN 先 prepare,全部成功再 commit,任一失败则整体回滚,保证分布式事务的原子性。这也是为什么 CN 数量不宜过多——每个分布式事务都要在节点间协调,CN 过多会放大 GTM 与互连开销。


代价估算的输入是统计信息,所以大批量加载后必须 ANALYZE,否则优化器拿到的是旧行数,容易选错广播或重分布,造成数据倾斜与性能塌方。


### 2.8 存储引擎与压缩


行存表把一条记录的所有字段连续存放,适合点查、频繁更新与事务型负载;列存表把同一列的值连续存放,同一列数据类型一致,压缩率高,并且扫描时只读需要的列,配合向量化执行一次处理一批数据,非常适合大表扫描、分组聚合与报表。DWS 的列存压缩提供 low/middle/high 等档位,档位越高压缩比越大,但解压 CPU 开销也越高,需要在存储成本与查询速度间权衡。


存算分离版本的 H-Store 存储引擎面向高吞吐实时写入做了优化,兼顾大批量导入与高频小写入;数据落在 OBS 后,DN 本地盘只做缓存与元数据,计算节点可以独立扩缩,不必与存储等比例扩容,历史数据也无需为扩容而迁移。


### 2.9 弹性扩容与高可用原理


存算一体架构扩容时,新增 DN 加入集群,原有数据按新的节点数重新哈希分布(再平衡),扩容过程对业务有一定影响,一般在业务低峰滚动执行。高可用方面,每个 DN 的主、备、从备通过日志同步保持一致:主备实时同步,主故障备升主,新主再把增量日志同步给从备;原主恢复后以从备日志补齐缺失数据并降为备。从备只存补齐用的 Xlog 与复制通道数据,不额外全量存一份,因此比传统三副本节省约三分之一存储。CM 负责故障判定与仲裁,主备 CM Server 自身也做高可用,避免管理面单点。


### 2.10 选型对比与适用边界


风哥在这一节把 GaussDB(DWS) 与常见替代方案做客观对比,不做优劣宣传,只讲适用边界。


与传统单机关系型数据库相比,单机库擅长高频短事务与点查,纵向扩容受单机 CPU、内存、磁盘上限约束,数据量达到数 TB 后大表聚合明显吃力;DWS 把数据水平拆分到多节点横向扩展,扫描与聚合并行,适合 TB 到 PB 级分析,但并不追求单条事务的JZ低延迟。二者不是替代关系,OLTP 系统通过 ETL 或实时同步把明细送入 DWS 做分析,是最常见的组合。


与开源 MPP(如 Greenplum)相比,DWS 的优势在于国产化合规、与鲲鹏/x86 双栈适配、主备从高可用、资源池隔离与华为生态工具链(GDS、DSC、Data Studio、OBS 备份);开源方案则在社区自由度上更灵活。选型时要把合规要求、现有技术栈、运维团队能力、授权成本一起评估。


与云原生数仓存算分离方案相比,私有化部署的存算一体集群数据不出内网、延迟可控,但扩容需要等比例增配;存算分离把数据放对象存储,计算弹性更强,适合波峰波谷明显、希望按计算量付费的场景。本套风哥教程演示的是私有化存算一体离线部署,原因是教学环境不依赖云对象存储,命令链路更通用。


> 

> 网上搜索风哥教程可以学习全套数据库教程


适用边界要讲清楚:DWS 不适合作为高并发在线交易库,不适合频繁单行点查的业务,也不适合把它当成通用 KV 或文档库;它的主场是大表扫描、多维聚合、批量加载、报表与混合负载。判断一个业务该不该上 DWS,看三件事:数据规模是否到了单机扛不住、查询是否以聚合扫描为主、是否能接受分布式事务的协调开销。


---


## 三、部署方案与环境准备(实战操作)


从本节开始进入实战。本套风哥教程的所有配置参数均按 64GB 内存、8 vCPU 的规格给出,实验节点为 fgedu-net-cn1 与 fgedu-net-cn2,操作系统以 RHEL/openEuler/Kylin 兼容系为主,安装根目录统一使用 /fgedudb,数据库名与实例名使用 fgedudb,业务用户名使用 fgedu,数据库默认监听端口 8000。


### 3.1 硬件与拓扑规划


双节点实验拓扑如下:


| 节点 | 主机名 | 管理业务 IP | 内部通信 IP | vCPU | 内存 | 角色 |

| --- | --- | --- | --- | --- | --- | --- |

| 节点 1 | fgedu-net-cn1 | 192.168.10.11 | 10.0.0.11 | 8 | 64GB | CN + DN(主) |

| 节点 2 | fgedu-net-cn2 | 192.168.10.12 | 10.0.0.12 | 8 | 64GB | CN + DN(备) |


说明:生产环境每个 DN 都应配主、备、从备,且主备从分布在不同故障域,节点数不少于三;双节点仅用于教学演示安装与维护链路。内部通信网络建议使用独立万兆/二十兆 GE 网络,避免业务流量与数据复制流量争抢。


磁盘规划建议(/fgedudb 下):


```

/fgedudb/software        安装包与解压目录

/fgedudb/data             数据目录(DN 数据文件,建议独立挂载盘)

/fgedudb/log              运行日志与 pg_log

/fgedudb/backup           本地备份临时目录

/fgedudb/toolkit          脚本与工具存放

```


64GB 内存的资源分配思路:操作系统与缓存预留约 4GB,DN 可用进程内存(max_process_memory)按约 58GB 规划,s-hared_buffers 取物理内存的 25% 左右即约 16GB,work_mem 按并发会话与排序复杂度估算,后续参数章节风哥会给出具体取值。


### 3.2 操作系统基线配置


两台节点都要做基线。以下命令在 fgedu-net-cn1 与 fgedu-net-cn2 上分别执行(涉及主机名与 IP 的地方按节点替换)。


**第一步,配置主机名与 hosts 解析。**


```

# fgedu-net-cn1

hostnamectl set-hostname fgedu-net-cn1

# fgedu-net-cn2

hostnamectl set-hostname fgedu-net-cn2

```


两台节点的 /etc/hosts 都加入如下解析:


```

cat >> /etc/hosts << 'EOF'

192.168.10.11  fgedu-net-cn1

192.168.10.12  fgedu-net-cn2

10.0.0.11      fgedu-net-cn1-internal

10.0.0.12      fgedu-net-cn2-internal

EOF

```


**第二步,关闭防火墙与 SELinux(实验环境)。**


```

systemctl stop firewalld

systemctl disable firewalld

setenforce 0

sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

```


生产环境不建议直接关防火墙,而应只放行 8000、内部通信与 CM 管理端口;风哥在这里关闭是为了排除实验干扰。


**第三步,配置时间同步。** 分布式集群对时间一致性要求很高,GTM 依赖时间戳,时间漂移会导致事务快照异常。


```

yum install -y chrony

systemctl enable chronyd

systemctl start chronyd

chronyc sources -v

```


**第四步,配置内核参数。** 编辑 /etc/sysctl.conf,加入以下内容(按 8CPU/64GB 规格调):


```

cat >> /etc/sysctl.conf << 'EOF'

net.ipv4.tcp_fin_timeout = 60

net.ipv4.tcp_keepalive_time = 300

net.ipv4.tcp_keepalive_intvl = 30

net.ipv4.tcp_keepalive_probes = 3

net.core.somaxconn = 65535

net.core.rmem_max = 2147483647

net.core.wmem_max = 2147483647

net.ipv4.tcp_rmem = 4096 87380 16777216

net.ipv4.tcp_wmem = 4096 65536 16777216

vm.swappiness = 1

vm.overcommit_memory = 2

vm.overcommit_ratio = 95

net.ipv4.ip_local_port_range = 10000 65535

fs.file-max = 1000000

EOF

sysctl -p

```


关闭透明大页(THP),THP 的延迟合并会影响数据库读写稳定性:


```

echo never > /sys/kernel/mm/transparent_hugepage/enabled

echo never > /sys/kernel/mm/transparent_hugepage/defrag

# 写入开机自启,保证重启后生效

grep -q transparent_hugepage /etc/rc.local || cat >> /etc/rc.local << 'EOF'

echo never > /sys/kernel/mm/transparent_hugepage/enabled

echo never > /sys/kernel/mm/transparent_hugepage/defrag

EOF

chmod +x /etc/rc.local

```


**第五步,配置资源限制。** 编辑 /etc/security/limits.conf:


```

cat >> /etc/security/limits.conf << 'EOF'

omm  soft  nofile  1000000

omm  hard  nofile  1000000

omm  soft  nproc   unlimited

omm  hard  nproc   unlimited

omm  soft  stack   30720

omm  hard  stack   30720

omm  soft  core    unlimited

omm  hard  core    unlimited

EOF

```


风哥教程本文提醒:omm 是 GaussDB 操作系统管理员账号,limits.conf 必须在创建 omm 之前或同时准备好,账号创建后这些限制才会被会话继承。


### 3.3 创建用户、目录与互信


**第一步,创建数据库操作系统用户 omm 与用户组。**


```

groupadd -g 1001 dbgrp

useradd -u 1001 -g dbgrp -m -d /home/omm -s /bin/bas-h omm

echo "omm:Fg@2026#omm" | passwd --stdin omm

```


**第二步,创建目录并授权。**


```

mkdir -p /fgedudb/software /fgedudb/data /fgedudb/log /fgedudb/backup /fgedudb/toolkit

chown -R omm:dbgrp /fgedudb

chmod -R 750 /fgedudb

```


**第三步,配置 omm 用户免密互信。** 在 fgedu-net-cn1 上以 omm 生成密钥并分发到两台节点:


```

su - omm

ss-h-keygen -t rsa -N "" -f ~/.ss-h/id_rsa

ss-h-copy-id -i ~/.ss-h/id_rsa.pub omm@fgedu-net-cn1

ss-h-copy-id -i ~/.ss-h/id_rsa.pub omm@fgedu-net-cn2

ss-h-copy-id -i ~/.ss-h/id_rsa.pub omm@fgedu-net-cn1-internal

ss-h-copy-id -i ~/.ss-h/id_rsa.pub omm@fgedu-net-cn2-internal

```


验证互信,本机与对机都应免密返回主机名:


```

ss-h fgedu-net-cn1 "hostname"

ss-h fgedu-net-cn2 "hostname"

ss-h fgedu-net-cn1-internal "hostname"

ss-h fgedu-net-cn2-internal "hostname"

```


### 3.4 数据盘挂载与文件系统


数仓数据盘建议单独挂载,与操作系统盘分离,避免日志与系统盘争 IO。以 XFS 文件系统为例,两台节点分别执行:


> 

> 上51CTO搜索风哥可以学习全套数据库教程


```

# 查看待挂载数据盘

lsblk

# 格式化(/dev/vdb 按实际盘名替换,实验环境可使用 loop 或虚拟盘)

mkfs.xfs -f /dev/vdb

# 创建挂载点并写入 fstab

mkdir -p /fgedudb/data

echo "/dev/vdb /fgedudb/data xfs defaults,noatime,nobarrier 0 0" >> /etc/fstab

mount -a

chown -R omm:dbgrp /fgedudb/data

```


挂载参数说明:`noatime` 关闭访问时间更新,减少随机写;`nobarrier` 在内置掉电保护的存储上可关闭写屏障提升性能,普通磁盘保留默认。挂载后用 `df -T /fgedudb/data` 确认文件系统类型与挂载点正确。Swap 分区建议保留但把 vm.swappiness 设为 1(3.2 节已配),避免系统在内存充足时误把数据库换出。


### 3.5 集群部署 XML 规划


GaussDB(DWS) 离线安装通过一个 XML 配置文件描述集群拓扑,安装程序 gs_install 读取它完成分发与初始化。以下是本套风哥教程对应的 /fgedudb/software/cluster_config.xml 示例,节点名、角色、数据目录都按双节点填写:


```

<?xml version="1.0" encoding="UTF-8"?>

<ROOT>

  <CLUSTER>

    <PARAM name="clusterName" value="fgedudb_cluster" />

    <PARAM name="nodeNames" value="fgedu-net-cn1,fgedu-net-cn2" />

    <PARAM name="backIp1s" value="10.0.0.11,10.0.0.12" />

    <PARAM name="gaussdbVersion" value="GaussDB(DWS) 8.2.0" />

    <PARAM name="deployMode" value="single" />

    <PARAM name="clusterType" value="centralization" />

  </CLUSTER>

  <DEVICELIST>

    <DEVICE sn="fgedu-net-cn1">

      <PARAM name="name" value="fgedu-net-cn1" />

      <PARAM name="azName" value="az1" />

      <PARAM name="azPriority" value="1" />

      <PARAM name="backIp1" value="10.0.0.11" />

      <PARAM name="ss-hIp1" value="192.168.10.11" />

      <PARAM name="dataNum" value="1" />

      <PARAM name="dataPortBase" value="26000" />

      <PARAM name="dataNode1" value="/fgedudb/data/dn1,fgedu-net-cn1" />

      <PARAM name="dnIp" value="10.0.0.11" />

      <PARAM name="coordinatenode1" value="/fgedudb/data/coordinator,8000" />

    </DEVICE>

    <DEVICE sn="fgedu-net-cn2">

      <PARAM name="name" value="fgedu-net-cn2" />

      <PARAM name="azName" value="az1" />

      <PARAM name="azPriority" value="1" />

      <PARAM name="backIp1" value="10.0.0.12" />

      <PARAM name="ss-hIp1" value="192.168.10.12" />

      <PARAM name="dataNum" value="1" />

      <PARAM name="dataPortBase" value="26000" />

      <PARAM name="dataNode1" value="/fgedudb/data/dn1,fgedu-net-cn2" />

      <PARAM name="dnIp" value="10.0.0.12" />

      <PARAM name="coordinatenode1" value="/fgedudb/data/coordinator,8000" />

    </DEVICE>

  </DEVICELIST>

</ROOT>

```


关键点:dataNode1 指定 DN 数据目录所在节点,coordinatenode1 指定 CN 实例与端口;dataPortBase 是 DN 起始端口,实际 DN 端口在此基础上递增。XML 里的路径必须与 3.3 节创建的目录一致,且 omm 对其有读写权限。


---


## 四、集群安装配置(实战操作)


### 4.1 上传安装包并解压


把 GaussDB(DWS) 离线安装包(例如 GaussDB-DWS-8.2.0-CentOS-64bit.tar.gz)上传到 fgedu-net-cn1 的 /fgedudb/software 目录,切换 omm 用户解压:


```

su - omm

cd /fgedudb/software

tar -xzf GaussDB-DWS-8.2.0-CentOS-64bit.tar.gz

cd GaussDB-DWS-8.2.0-CentOS-64bit

```


解压后目录下一般包含 install 目录(安装程序)、script 目录(gs_install、gs_om 等运维工具)、lib 与依赖包。先把安装包内的环境依赖检查工具准备好,后续 gs_checkos 会用到。


### 4.2 操作系统预检查 gs_checkos


正式安装前必须用安装包自带的 gs_checkos 检查操作系统是否满足要求,避免安装中途因内核参数、依赖包、字符集不达标而失败。以 omm 用户执行:


```

cd /fgedudb/software/GaussDB-DWS-8.2.0-CentOS-64bit/script

./gs_checkos -i A -f /fgedudb/software/hostfile

```


其中 hostfile 是节点清单文件,内容为:


```

192.168.10.11

192.168.10.12

```


`-i A` 表示执行全套检查项(包含操作系统版本、内核参数、资源限制、时间同步、字符集、网络、依赖包)。检查结果会输出每一项的 OK / WARNING / NG,出现 NG 必须回退到 3.2 节逐项修复,直到全部 OK 再继续。风哥强调:预检查不通过就强行安装,是新手上路最常见的事故来源。


### 4.3 执行集群静默安装 gs_install


确认检查全部通过后,执行 gs_install,读取 3.4 节编写的 XML,把软件分发到所有节点并初始化实例:


```

cd /fgedudb/software/GaussDB-DWS-8.2.0-CentOS-64bit/script

./gs_install -X /fgedudb/software/cluster_config.xml \

  --gsinit-parameter="--encoding=UTF-8 --locale=C" \

  -U omm:dbgrp \

  -G dbgrp \

  -r /fgedudb/software/GaussDB-DWS-8.2.0-CentOS-64bit \

  -l /fgedudb/log/gs_install.log

```


参数说明:`-X` 指定集群 XML;`--gsinit-parameter` 透传给数据库初始化,指定编码与 locale;`-U` 指定操作系统管理员 omm 与其组;`-G` 指定数据库管理组;`-r` 指定安装包解压目录,用于跨节点分发;`-l` 指定安装日志。安装过程中脚本会自动把二进制分发到各节点、创建实例、初始化数据目录、写入集群元数据。


安装完成后,脚本会提示数据库 superuser(omm)初始密码,并在各节点生成 gaussdb 环境变量文件。按提示记录密码,并用 omm 执行环境变量加载:


```

source /fgedudb/basic/env/OM

```


建议把这行写入 omm 的 ~/.bas-hrc,避免每次登录都要手动 source:


```

echo 'source /fgedudb/basic/env/OM' >> ~/.bas-hrc

```


### 4.4 S首启动集群与状态核验


安装完成后集群通常已自动启动,若需要手动启动,使用集群管理工具 gs_om:


```

gs_om -t start

```


启动顺序由 CM 自动协调:先拉起 CM Server/Agent,再拉起 GTM,然后拉起 DN,最后拉起 CN。查看集群整体状态:


```

gs_om -t status --detail

```


正常输出中每个 DN 应显示 Primary / Standby,CN 显示 Coordinator,所有实例状态为 Normal。再执行集群健康检查:


```

gs_check -i CheckCluster -U omm -l /fgedudb/log/check_cluster.log

```


gs_check 是日常巡检与故障定位的主力工具,`-i CheckCluster` 只检查集群状态,完整版不带 -i 会执行全部检查项。


使用 gsql 以 omm 管理员登录默认数据库,验证 CN 可路由到 DN:


```

gsql -h fgedu-net-cn1 -U omm -d postgres -p 8000 -W "安装时设置的omm密码"

```


进入 gsql 后执行:


```

-- 查看集群节点拓扑

SELECT node_name, node_type, node_host, port FROM pgxc_node;

-- 查看各节点状态

SELECT * FROM pg_stat_get_nodes();

```


能正常返回节点列表,说明 CN 已经连通 DN,集群安装配置阶段完成。


### 4.5 安装失败回滚与版本校验


若 gs_install 中途报 NG,先不要反复重试,按日志定位。安装日志在 /fgedudb/log/gs_install.log,节点级日志在各节点 /fgedudb/log 下:


> 

> 风哥 itpux-com


```

grep -iE "error|fatal|fail" /fgedudb/log/gs_install.log | tail -50

```


常见失败原因:互信未通、XML 路径与实际目录不符、omm 权限不足、内核参数未生效、依赖包缺失、端口被占用。修复后需要先回滚已安装内容再重装,避免残留实例冲突:


```

# 停止可能已拉起的实例

gs_om -t stop --force 2>/dev/null || true

# 执行卸载回滚(使用安装包内的 gs_uninstall)

cd /fgedudb/software/GaussDB-DWS-8.2.0-CentOS-64bit/script

./gs_uninstall --delete-data -X /fgedudb/software/cluster_config.xml

# 清理残留目录与锁文件

rm -rf /fgedudb/data/* /fgedudb/log/* /fgedudb/toolkit/*.lock

```


回滚干净后重新执行 4.3 的 gs_install。安装成功后校验版本与架构:


```

gs_om -t version

gsql -h fgedu-net-cn1 -U omm -d postgres -p 8000 -c "SELECT version();"

gsql -h fgedu-net-cn1 -U omm -d postgres -p 8000 -c "SELECT datname FROM pg_database;"

```


version() 返回内核版本与编译信息,datname 列表确认默认库与新建库 fgedudb 都在。


---


## 五、GaussDB(DWS) 数据库日常维护管理(实战操作)


### 5.1 GaussDB(DWS) 数据库日常检查


日常检查是运维的基本功。风哥把每日巡检固化成一组命令,建议写成定时脚本自动执行,输出归档到 /fgedudb/log/daily_check。


**检查一,集群整体状态。**


```

gs_om -t status --detail

```


重点看每个实例的状态是否为 Normal,主备角色是否符合预期,是否有停摆或 Degraded 节点。


**检查二,执行集群健康检查。**


```

gs_check -i CheckCluster,CheckCPU,CheckMemory,CheckDisk,CheckTableSpace -U omm -l /fgedudb/log/gs_check_daily.log

```


这条命令一次性覆盖集群状态、CPU、内存、磁盘与表空间。CheckDisk 会检查数据盘使用率,数仓场景磁盘增长快,建议设置 70% 预警、85% 告警。


**检查三,查看会话与长事务。**


```

gsql -h fgedu-net-cn1 -U omm -d fgedudb -p 8000 -c \

"SELECT pid, usename, state, query_start, now()-query_start AS dur, query \

 FROM pg_stat_activity \

 WHERE state <> 'idle' ORDER BY dur DESC LIMIT 20;"

```


长事务会持有快照与锁、阻塞 Vacuum 与清理,出现运行时间异常长的会话要判断是正常跑批还是卡死。


**检查四,检查复制延迟与主备同步。**


```

SELECT node_name, sender_pid, received_lsn, write_lsn, replay_lsn, \

       pg_xlog_location_diff(replay_lsn, received_lsn) AS delay_bytes \

FROM pg_stat_get_replication_slot();

```


**检查五,查看错误日志。** 各 DN/CN 的运行日志位于 /fgedudb/data/<实例目录>/pg_log,按天滚动:


```

tail -n 200 /fgedudb/data/coordinator/pg_log/postgres-*.log | grep -iE "error|fatal|panic|warning"

```


风哥提示:日常巡检不要只看状态"是否活着",还要看磁盘趋势、慢查询、复制延迟与日志中的 ERROR,这四类问题决定集群能否长期稳定运行。


### 5.2 GaussDB(DWS) 集群启动停止与基本维护


**启动整个集群:**


```

gs_om -t start

```


**停止整个集群(优雅停止,等待连接释放):**


```

gs_om -t stop

```


**强制停止(紧急故障时使用,会直接终止进程):**


```

gs_om -t stop --force

```


**重启整个集群:**


```

gs_om -t restart

```


**单独操作某一个节点(例如只重启 fgedu-net-cn2 上的 DN):**


```

# 停止指定节点

gs_om -t stop -n fgedu-net-cn2

# 启动指定节点

gs_om -t start -n fgedu-net-cn2

```


**查看节点实时状态与版本:**


```

gs_om -t status --all

gs_om -t version

```


**查看 CM 管理面信息:**


```

cm_ctl query -Cv

```


cm_ctl 用于查看 CM Server 主备、实例仲裁状态,当出现节点异常但 gs_om 状态显示不清时,用它定位管理面问题。


日常维护还有两个高频动作:刷新统计信息与备份。分析表在大批量加载后需要更新统计信息,优化器才能选对计划:


```

-- 收集单表统计信息

ANALYZE fgedudb.sales_order;

-- 全库收集(建议在业务低峰执行)

ANALYZE;

```


集群快照备份可通过管理工具或 gs_dumpall 导出逻辑备份:


```

# 导出 fgedudb 单库

gs_dump -h fgedu-net-cn1 -U omm -p 8000 -d fgedudb \

  -f /fgedudb/backup/fgedudb_$(date +%Y%m%d).sql -F p

# 导出集群全部数据库与全局对象

gs_dumpall -h fgedu-net-cn1 -U omm -p 8000 \

  -f /fgedudb/backup/cluster_all_$(date +%Y%m%d).sql

```


### 5.3 GaussDB(DWS) 认证配置与远程登录


默认情况下集群只允许本机与可信内网登录,业务应用远程访问需要修改认证配置。GaussDB(DWS) 的访问控制由 pg_hba.conf 管理,CN 与每个 DN 都有一份,远程连接先打到 CN,因此改 CN 的 pg_hba.conf 即可放行应用网段。


**第一步,创建业务数据库与业务用户。** 以 omm 登录默认库:


```

gsql -h fgedu-net-cn1 -U omm -d postgres -p 8000

```


在 gsql 内执行:


```

-- 创建业务数据库 fgedudb

CREATE DATABASE fgedudb WITH ENCODING 'UTF8' LC_COLLATE 'C' LC_CTYPE 'C' TEMPLATE = template0;

-- 创建业务用户 fgedu,并设置密码

CREATE USER fgedu WITH PASSWORD 'Fg@2026#fgedu' SYSADMIN;

-- 授予 fgedudb 数据库的全部权限

GRANT ALL PRIVILEGES ON DATABASE fgedudb TO fgedu;

\q

```


说明:教学场景为简化操作把 fgedu 设为 SYSADMIN;生产环境应遵循最小权限,只授予 CONNECT、USAGE 与表级 DML 权限,禁止给业务用户超管权限。


**第二步,修改 pg_hba.conf 放行远程网段。** 使用 gs_guc 统一在所有节点设置认证规则,避免逐台手工改:


```

gs_guc set -N all -I all -h "host fgedudb fgedu 192.168.10.0/24 md5"

```


`-N all` 表示所有节点,`-I all` 表示该节点上所有实例;`-h` 后面是一条 pg_hba 规则:允许 fgedu 用户从 192.168.10.0/24 网段用 md5 密码认证访问 fgedudb 库。如需放行应用服务器的具体 IP,把网段换成单 IP,例如 `192.168.10.50/32`。


> 

> 风哥教程 113257174


查看当前认证规则是否写入成功:


```

gs_guc check -N all -I all -h "host"

```


**第三步,设置密码复杂度策略。** 在 gsql 内或通过 gs_guc 配置密码加密与策略:


```

-- 查看当前密码策略相关参数

s-hOW password_encryption_type;

s-hOW password_policy;

```


通过 gs_guc 全集群设置密码加密类型与重用限制:


```

gs_guc set -N all -I all -c "password_encryption_type=2"

gs_guc set -N all -I all -c "password_policy=1"

```


**第四步,远程登录验证。** 在业务客户端机器上使用 gsql、JDBC/ODBC 或 Data Studio 连接。gsql 命令格式:


```

gsql -h fgedu-net-cn1 -p 8000 -d fgedudb -U fgedu -W "Fg@2026#fgedu"

```


参数说明:`-h` 为 CN 地址(生产环境建议接负载均衡 VIP),`-p` 为 CN 端口,`-d` 为目标数据库 fgedudb,`-U` 为用户 fgedu,`-W` 为密码。登录成功后提示符变为 `fgedudb=>`。


JDBC 连接串示例(供开发参考):


```

jdbc:gaussdb://fgedu-net-cn1:8000/fgedudb?user=fgedu&password=Fg@2026#fgedu&sslmode=disable

```


若远程连接被拒绝,按顺序排查:pg_hba.conf 是否放行该来源 IP、密码是否正确、CN 端口是否监听、防火墙是否放行 8000、客户端驱动版本是否与内核匹配。


### 5.4 GaussDB(DWS) 集群参数修改


GaussDB(DWS) 参数分两类:一类是修改后需要重启实例才能生效的(如 s-hared_buffers、max_process_memory),一类是 reload 即可生效的(如 work_mem、查询开关类)。修改参数有两条途径:gs_guc 命令行(推荐,可全集群统一下发)与 SQL 的 ALTER SYSTEM。


**方式一,gs_guc 设置并 reload。** 按 64GB/8CPU 规格,先设置内存类核心参数:


```

# 进程可用总内存,64GB 物理内存按约 90% 预留给数据库

gs_guc set -N all -I all -c "max_process_memory=58GB"

# 共享缓冲区,取物理内存约 25%

gs_guc set -N all -I all -c "s-hared_buffers=16GB"

# 单个排序/哈希操作内存,按并发估算

gs_guc set -N all -I all -c "work_mem=256MB"

# 列存缓冲区

gs_guc set -N all -I all -c "cstore_buffers=4GB"

# 最大并发连接数

gs_guc set -N all -I all -c "max_connections=500"

```


对可 reload 的参数,设置后立即下发生效:


```

gs_guc reload -N all -I all -c "work_mem=256MB"

```


对需要重启的参数,reload 不会生效,必须滚动重启:


```

# 滚动重启,逐个节点重启,避免集群整体中断

gs_om -t restart

```


**方式二,SQL 方式修改。** 以 omm 登录后:


```

-- 设置集群级参数(写入所有节点)

ALTER SYSTEM SET work_mem = '256MB';

-- 仅在当前会话测试

SET work_mem = '512MB';

-- 查看参数当前值

s-hOW work_mem;

-- 查看参数是否需要重启(pending_restart 为真表示需重启)

SELECT name, setting, pending_restart FROM pg_settings WHERE name='s-hared_buffers';

```


**按 64GB/8CPU 规格补充的常用参数:**


```

# 每条查询最大并行度,8CPU 单节点建议 4~8

gs_guc set -N all -I all -c "max_workers=8"

gs_guc set -N all -I all -c "query_dop=4"

# 单条语句超时(秒),防止失控大查询长期占用资源

gs_guc set -N all -I all -c "statement_timeout=3600"

# 连接空闲超时,释放闲置会话

gs_guc set -N all -I all -c "idle_in_transaction_session_timeout=600"

# 优化器估算参考的缓存命中率,按内存调

gs_guc set -N all -I all -c "effective_cache_size=48GB"

# 是否允许小表广播,默认开启

gs_guc set -N all -I all -c "enable_broadcast=on"

# 编码与时区

gs_guc set -N all -I all -c "lc_messages='C'"

```


这些参数里,max_process_memory、s-hared_buffers、max_connections 属于重启生效类;work_mem、statement_timeout、query_dop、enable_broadcast 属于 reload 生效类。改之前先确认类别,避免改完不生效误判。


**验证参数是否全集群一致:**


```

gs_guc check -N all -I all -c "s-hared_buffers"

```


风哥强调三个工程纪律:第一,改参数前先备份原配置,`gs_guc export` 可导出当前配置;第二,内存类参数总和不能超过物理内存,否则 OOM 会导致节点被 CM 拉起又反复崩溃;第三,生产环境改参数必须先在测试节点验证,再滚动下发,严禁一次性全集群重启。


导出当前配置留档:


```

gs_guc export /fgedudb/toolkit/guc_backup_$(date +%Y%m%d).zip

```


### 5.5 GaussDB(DWS) 集群表的创建与使用


分布式数仓的表设计直接决定性能,核心是选对分布方式、选对存储格式、选对分布列。本节在 fgedudb 库、fgedu 用户下完成建表、加载、查询与资源池配置。


**第一步,创建行存事实表(HAs-h 分布)。** 订单事实表按订单号哈希分布,保证数据均匀:


```

CREATE TABLE sales_order (

    order_id    BIGINT       NOT NULL,

    cust_id     BIGINT       NOT NULL,

    prod_id     BIGINT       NOT NULL,

    order_time  TIMESTAMP    NOT NULL,

    amount      NUMERIC(18,2) NOT NULL,

    region_code VARCHAR(16)

)

WITH (orientation=row, compression=no)

DISTRIBUTE BY HAs-h(order_id);

```


`orientation=row` 指定行存,`compression=no` 表示不压缩;`DISTRIBUTE BY HAs-h(order_id)` 按 order_id 哈希散列到各 DN。HAs-h 分布要求分布列高基数、分布均匀,避免某 DN 数据量远超其他节点造成倾斜。


**第二步,创建列存维度表(REPLICATION 复制分布)。** 商品维表数据量小,每个 DN 存一份完整副本,关联时免数据重分布:


```

CREATE TABLE dim_product (

    prod_id    BIGINT       NOT NULL,

    prod_name  VARCHAR(128) NOT NULL,

    category   VARCHAR(64),

    price      NUMERIC(18,2)

)

WITH (orientation=column, compression=low)

DISTRIBUTE BY REPLICATION;

```


`orientation=column` 为列存,`compression=low` 启用轻量压缩;列存配合向量化执行,大表扫描与聚合性能远高于行存。


**第三步,创建轮询分布的中间结果表。** 没有合适分布列的临时结果用 ROUNDROBIN:


```

CREATE TABLE tmp_agg_result (

    region_code VARCHAR(16),

    total_amount NUMERIC(18,2)

)

WITH (orientation=row)

DISTRIBUTE BY ROUNDROBIN;

```


> 

> 风哥数据库教程 itpux-com


**第四步,创建范围分区表。** 按订单时间做 RANGE 分区,便于按时间裁剪与老数据归档:


```

CREATE TABLE sales_order_part (

    order_id    BIGINT       NOT NULL,

    cust_id     BIGINT       NOT NULL,

    prod_id     BIGINT       NOT NULL,

    order_time  TIMESTAMP    NOT NULL,

    amount      NUMERIC(18,2) NOT NULL,

    region_code VARCHAR(16)

)

WITH (orientation=row)

DISTRIBUTE BY HAs-h(order_id)

PARTITION BY RANGE(order_time) (

    PARTITION p2024 VALUES LESS THAN ('2025-01-01'),

    PARTITION p2025 VALUES LESS THAN ('2026-01-01'),

    PARTITION p2026 VALUES LESS THAN ('2027-01-01'),

    PARTITION pmax  VALUES LESS THAN (MAXVALUE)

);

```


查询带 `order_time` 条件时优化器会做分区裁剪,只扫描命中的分区。


**第五步,本地文件加载。** 使用 COPY 把客户端 CSV 载入表:


```

COPY sales_order FROM '/fgedudb/toolkit/sales_order.csv'

WITH (FORMAT 'csv', HEADER, DELIMITER ',', ENCODING 'UTF8');

```


大批量生产加载使用 GDS(General Data Service)并行加载工具,把多份分片文件并行灌入各 DN,命令形态为:


```

gds_loader --gds-address=192.168.10.11:5000 \

  --db-name=fgedudb --db-user=fgedu --db-password='Fg@2026#fgedu' \

  --schema=public --table=sales_order \

  --format=csv --delimiter=',' \

  --data-source='/fgedudb/toolkit/order_part_*.csv'

```


**第六步,执行分析查询并查看执行计划。**


```

SELECT region_code, SUM(amount) AS total_amt, COUNT(*) AS order_cnt

FROM sales_order

WHERE order_time >= '2026-01-01'

GROUP BY region_code

ORDER BY total_amt DESC;


-- 查看分布式执行计划,判断是否有数据重分布/广播

EXPLAIN PERFORMANCE

SELECT d.category, SUM(s.amount)

FROM sales_order s JOIN dim_product d ON s.prod_id = d.prod_id

GROUP BY d.category;

```


`EXPLAIN PERFORMANCE` 会输出各 DN 的实际执行时间与数据量,重点关注 Streaming 算子(数据重分布/广播)是否合理、是否出现单点倾斜。


**第七步,检查数据倾斜。** 数仓运维最常见的性能杀手就是倾斜。查看每张表在各 DN 的行数分布:


```

SELECT relname, node_name, count_rows

FROM pgxc_get_table_skewness('sales_order');

```


也可以直接统计各分片行数:


```

SELECT node_name, COUNT(*) FROM sales_order GROUP BY node_name ORDER BY 2 DESC;

```


若最大分片行数是最小分片的数倍,说明分布列选错或存在热点,需要重新选分布列或引入哈希打散。


**第八步,配置资源池与工作负载隔离。** 按 64GB/8CPU 规格,为报表业务与 ETL 业务分别建资源池,限制资源争抢:


```

-- 创建报表资源池,CPU 权重 40,内存上限 40%,并发上限 20

CREATE RESOURCE POOL rp_report

WITH (mem_percent=40, active_statements=20, cpu_weight=40);


-- 创建 ETL 资源池,CPU 权重 60,内存上限 60%,并发上限 10

CREATE RESOURCE POOL rp_etl

WITH (mem_percent=60, active_statements=10, cpu_weight=60);


-- 创建工作负载组并绑定资源池

CREATE WORKLOAD GROUP wg_report WITH (resource_pool=rp_report);

CREATE WORKLOAD GROUP wg_etl WITH (resource_pool=rp_etl);


-- 把业务用户绑定到对应资源池

ALTER USER fgedu RESOURCE POOL rp_report;

```


资源池生效后,报表会话即使并发很高也不会把 ETL 跑批的内存与 CPU 抢走,这就是 WLM 在混合负载下的核心价值。


**第八步补充,视图、物化视图与外表。** 普通视图只是保存查询定义,每次访问都重新计算:


```

CREATE VIEW v_region_sales AS

SELECT region_code, SUM(amount) AS total_amt, COUNT(*) AS order_cnt

FROM sales_order GROUP BY region_code;


SELECT * FROM v_region_sales ORDER BY total_amt DESC;

```


物化视图会把结果实体化存储,适合结果稳定、查询频繁的报表,需要手动刷新:


```

CREATE MATERIALIZED VIEW mv_month_sales AS

SELECT date_trunc('month', order_time) AS mon, SUM(amount) AS amt

FROM sales_order GROUP BY 1;


-- 业务低峰刷新物化视图

REFREs-h MATERIALIZED VIEW mv_month_sales;

```


对接数据湖或外部文件时使用外部表(Foreign Table),数据仍留在 OBS 或 GDS 文件上,只在库内注册元数据:


```

CREATE FOREIGN TABLE ext_order_log (

    order_id BIGINT, cust_id BIGINT, prod_id BIGINT,

    order_time TIMESTAMP, amount NUMERIC(18,2), region_code VARCHAR(16)

) SERVER gds_server

OPTIONS (

    location 'gsfs://192.168.10.11:5000/order_log/',

    format 'csv', encoding 'UTF8', delimiter ','

)

DISTRIBUTE BY HAs-h(order_id);

```


**第九步,索引与统计信息维护。** 数仓一般不建过多 B-tree 索引(写入代价高),主要依赖列存与分区裁剪;必要时对高频过滤列建索引:


```

CREATE INDEX idx_order_time ON sales_order(order_time) TABLESPACE pg_default;

ANALYZE sales_order;

```


### 5.6 日常监控与常见故障处置


**监控项一,节点资源。** 通过 gs_check 或系统命令采集 CPU、内存、磁盘:


```

gs_check -i CheckCPU,CheckMemory,CheckDisk -U omm

top -bn1 | head -20

df -h /fgedudb/data

```


**监控项二,会话与锁等待。** 查看被阻塞的会话:


```

SELECT blocked.pid AS blocked_pid, blocked.query AS blocked_query,

       blocker.pid AS blocker_pid, blocker.query AS blocker_query

FROM pg_locks lk

JOIN pg_stat_activity blocked ON blocked.pid = lk.pid

JOIN pg_locks bl ON bl.locktype = lk.locktype AND bl.relation = lk.relation AND bl.granted

JOIN pg_stat_activity blocker ON blocker.pid = bl.pid

WHERE NOT lk.granted;

```


**监控项三,慢查询与资源池。** 开启或查看慢查询统计后,从系统视图捞出耗时最长的语句:


```

SELECT node_name, query_id, duration, query

FROM pgxc_stat_stmt_history

ORDER BY duration DESC LIMIT 20;

```


查看各资源池当前并发与内存占用,确认隔离策略是否生效:


```

SELECT rpname, active_statements, max_active_statements,

       memory_limit, used_memory

FROM pg_resource_pool;

```


**故障一,某 DN 状态异常或被隔离。** 先用 cm_ctl 与 gs_om 定位:


```

gs_om -t status --detail

cm_ctl query -Cv

```


若为临时进程崩溃,CM 通常会自动拉起;自动恢复失败时手动重启该节点:


```

gs_om -t stop -n fgedu-net-cn2

gs_om -t start -n fgedu-net-cn2

```


**故障二,主备复制中断、备库落后。** 查看复制状态与延迟:


```

SELECT * FROM pg_stat_get_replication_slot();

```


检查网络、备库磁盘空间与 pg_log 报错;修复后观察 replay_lsn 是否追平。


**故障三,查询变慢、结果倾斜。** 先看执行计划与分片行数,确认是否分布不均或缺少分区裁剪,必要时重选分布列、补 ANALYZE。


**故障四,连接被拒绝。** 依次检查 pg_hba.conf 规则、max_connections 是否打满、CN 端口与防火墙。


**故障五,磁盘即将写满。** 先清理过期分区与临时表,再评估扩容:


```

-- 查看各表占用空间

SELECT relname, pg_size_pretty(pg_total_relation_size(relid)) AS size

FROM pg_catalog.pg_tables ORDER BY pg_total_relation_size(relid) DESC LIMIT 20;

```


---


## 六、风哥针对本文总结


风哥针对本文做一次完整回顾。本套风哥教程围绕华为高斯 GaussDB(DWS) 这个 PB 级 MPP 分布式数据仓库平台,按"架构理论—部署环境—安装配置—日常维护"四条线展开,所有命令均在 64GB 内存、8 vCPU 的 fgedu-net-cn1、fgedu-net-cn2 双节点环境下给出,安装根目录统一为 /fgedudb,库名与实例名为 fgedudb,业务用户为 fgedu。


理论部分需要记住三句话:第一,DWS 是 s-hared-nothing 的 MPP 架构,数据水平分布到 DN,查询切片并行执行;第二,集群由 CM、GTM、WLM、CN、DN 五类模块组成,CN 对等协调节点、DN 主备从高可用;第三,表设计的关键是分布方式(HAs-h/REPLICATION/ROUNDROBIN)、存储格式(行存/列存)与分布列选型,数据倾斜是头号性能杀手。


实战部分的工程纪律要落到习惯:安装前先 gs_checkos 过基线,安装用 gs_install 读 XML,启停用 gs_om,认证改 pg_hba.conf 并用 gs_guc 全集群下发,参数分清重启类与 reload 类再滚动变更,建表先定分布列再加载,大批量加载后必须 ANALYZE,混合负载用资源池隔离。任何变更前先备份配置与数据,任何故障先看 gs_om 状态、cm_ctl 仲裁与 pg_log 报错,不要盲目重启。


风哥最后强调,分布式数仓的能力不是靠单条命令堆出来的,而是靠架构理解加规范操作沉淀的。初学者容易只记命令、忽略原理,遇到倾斜、复制延迟、参数不生效就无从下手;把分布式执行计划、主备从同步、资源池调度这三块原理吃透,再对照本套风哥教程的命令反复练习,才能在生产环境独立完成部署与运维。


本套风哥教程到此结束。读者可在测试环境中先完成双节点安装与建表加载,再逐步尝试分区表、物化视图、资源池隔离与故障切换演练,把命令转化为肌肉记忆。后续若需要深入 SQL 分布式优化、数据迁移(DSC/GDS)、存算分离与逻辑集群等进阶内容,可在本套风哥教程基础上继续拓展。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9664900/viewspace-3188310/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
风哥Oracle,MySQL,PostgreSQL,Linux,大数据,国产数据库,中间件等教程

注册时间:2010-10-26

  • 博文量
    98
  • 访问量
    429948