目录
[1. GaussDB 概述](#1. GaussDB 概述)
[1.1 GaussDB 简介](#1.1 GaussDB 简介)
[1.2 核心技术架构](#1.2 核心技术架构)
[1.3 适用场景与行业案例](#1.3 适用场景与行业案例)
[2. GaussDB 安装与部署](#2. GaussDB 安装与部署)
[2.1 环境准备与依赖检查](#2.1 环境准备与依赖检查)
[2.2 单机版安装(Linux)](#2.2 单机版安装(Linux))
[2.3 分布式集群部署](#2.3 分布式集群部署)
[3. GaussDB 基础操作与语法](#3. GaussDB 基础操作与语法)
[3.1 数据库连接与用户管理](#3.1 数据库连接与用户管理)
[3.2 DDL 语句示例](#3.2 DDL 语句示例)
[3.3 DML 语句](#3.3 DML 语句)
[3.4 复杂查询](#3.4 复杂查询)
[3.5 事务控制](#3.5 事务控制)
[4. GaussDB 运维管理](#4. GaussDB 运维管理)
[4.1 性能监控](#4.1 性能监控)
[4.2 备份与恢复](#4.2 备份与恢复)
[5. GaussDB 高级功能](#5. GaussDB 高级功能)
[5.1 分布式事务](#5.1 分布式事务)
[5.2 高可用方案](#5.2 高可用方案)
[6. 实战案例:电商高并发场景](#6. 实战案例:电商高并发场景)
[7. 常见问题与解决方案](#7. 常见问题与解决方案)
[7.1 连接数不足](#7.1 连接数不足)
[7.2 查询性能下降](#7.2 查询性能下降)
1. GaussDB 概述
1.1 GaussDB 简介
GaussDB 是华为基于开源 PostgreSQL 开发的企业级分布式数据库,支持 OLTP(在线事务处理)和 OLAP(在线分析处理)混合负载。其核心特性包括:
-
高可用性:多副本自动切换,RPO=0,RTO<10秒。
-
弹性扩展:支持在线动态扩缩容,数据自动重分布。
-
安全合规:支持国密算法、数据脱敏、审计日志。
1.2 核心技术架构
1.2.1 分布式存储引擎
-
数据分片(Sharding):通过哈希、范围、列表等方式将数据分布到多个节点。
sql-- 创建分片表(HASH分片) CREATE TABLE user_orders ( order_id BIGINT PRIMARY KEY, user_id INT, amount DECIMAL(10,2) ) DISTRIBUTE BY HASH(user_id);
-
多副本机制:每个分片默认3副本,通过 RAFT 协议保证一致性。
1.2.2 HTAP 混合引擎
-
行存储:适用于高并发事务(如订单处理)。
-
列存储:适用于分析查询(如报表统计)。
-
内存引擎:支持实时数据处理(如风控系统)。
1.2.3 AI 增强优化器
-
基于历史查询统计自动优化执行计划。
-
支持 SQL 性能自动调优(如索引推荐)。
1.3 适用场景与行业案例
案例 1:某银行核心交易系统
-
需求:日均交易量 1 亿笔,要求 7x24 小时高可用。
-
方案:
-
使用分布式行存表处理实时交易。
-
列存表用于每日对账分析。
-
两地三中心部署,跨城同步延迟 <2 秒。
-
案例 2:某智慧城市物联网平台
-
需求:管理 1000 万+ 设备,存储 5 年历史数据。
-
方案:
-
使用时序表(Timeseries Engine)存储设备数据。
-
数据按时间分片(每日一个分片)。
-
压缩率高达 10:1,节省存储成本。
-
2. GaussDB 安装与部署
2.1 环境准备与依赖检查
硬件要求:
组件 | 最低配置 | 推荐配置 |
---|---|---|
CPU | 4 核(x86_64) | 16 核(鲲鹏 920) |
内存 | 16GB | 64GB |
磁盘 | 200GB HDD | 1TB SSD(RAID 10) |
软件依赖:
bash
# CentOS 7.6+ 示例
sudo yum install -y libaio-devel openssl-devel python3
sudo systemctl disable firewalld # 关闭防火墙
2.2 单机版安装(Linux)
步骤 1:下载安装包
从 华为开源镜像站 获取安装包:
bash
wget https://mirrors.huaweicloud.com/gaussdb/5.0.1/GaussDB-5.0.1-Linux-x86_64.tar.gz
步骤 2:解压与初始化
bash
tar -xzf GaussDB-5.0.1-Linux-x86_64.tar.gz
cd GaussDB/bin
./gs_initdb -D /data/gaussdb --nodename=primary --encoding=UTF-8
关键参数说明:
-
-D
:数据目录路径。 -
--nodename
:节点名称(单机版默认为 primary)。
步骤 3:启动服务
bash
./gs_ctl start -D /data/gaussdb -l /var/log/gaussdb/start.log
日志验证:
bash
tail -f /var/log/gaussdb/start.log # 查看 "database system is ready" 表示启动成功
2.3 分布式集群部署
配置文件 cluster_config.xml
:
XML
<ROOT>
<CLUSTER>
<PARAM name="clusterName" value="gauss_cluster"/>
<PARAM name="nodeNames" value="node1,node2,node3"/>
<PARAM name="backIp1s" value="192.168.1.101,192.168.1.102,192.168.1.103"/>
<PARAM name="gaussdbAppPath" value="/opt/gaussdb"/>
<PARAM name="gaussdbLogPath" value="/var/log/gaussdb"/>
</CLUSTER>
</ROOT>
部署命令:
bash
./gs_om -t install --cluster-config cluster_config.xml
验证集群状态:
bash
./gs_om -t status # 输出所有节点状态为 "Normal"
3. GaussDB 基础操作与语法
3.1 数据库连接与用户管理
连接数据库:
bash
gsql -d postgres -U gaussdb -W -h 127.0.0.1 -p 5432
参数说明:
-
-d
:数据库名(默认 postgres)。 -
-U
:用户名(安装时创建的初始用户)。
创建只读用户:
sql
CREATE USER analyst WITH PASSWORD 'Analyst@123';
GRANT CONNECT ON DATABASE postgres TO analyst;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO analyst;
3.2 DDL 语句示例
创建分区表:
sql
CREATE TABLE sensor_data (
sensor_id INT,
log_time TIMESTAMP,
temperature FLOAT
) PARTITION BY RANGE (log_time)
(
PARTITION p2023_01 VALUES LESS THAN ('2023-02-01'),
PARTITION p2023_02 VALUES LESS THAN ('2023-03-01')
);
参数优化示例:
sql
ALTER TABLE sensor_data SET (fillfactor=70); -- 减少页分裂
3.3 DML 语句
批量插入数据:
sql
INSERT INTO user_orders
VALUES
(1, 1001, 99.99),
(2, 1002, 199.99)
DISTRIBUTE BY HASH(user_id); -- 显式指定分片键
更新带条件的数据:
sql
UPDATE user_orders
SET amount = amount * 0.9
WHERE user_id IN (SELECT user_id FROM vip_users);
3.4 复杂查询
窗口函数示例:
sql
SELECT
user_id,
order_date,
amount,
SUM(amount) OVER (PARTITION BY user_id ORDER BY order_date) AS cumulative_sum
FROM user_orders;
3.5 事务控制
显式事务示例:
sql
BEGIN;
SAVEPOINT sp1;
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
-- 若后续操作失败可回滚到保存点
ROLLBACK TO sp1;
COMMIT;
4. GaussDB 运维管理
4.1 性能监控
查看实时会话:
sql
SELECT * FROM pg_stat_activity WHERE state = 'active';
监控工具 gs_checkperf
:
sql
gs_checkperf -i PMK -U gaussdb # 检查 CPU/内存/磁盘/网络
4.2 备份与恢复
逻辑备份:
bash
gs_dump -U gaussdb -d mydb -F c -f mydb.dmp # 自定义格式
物理备份:
bash
gs_basebackup -D /backup/gaussdb -h 192.168.1.101 -p 5432 -U replica
5. GaussDB 高级功能
5.1 分布式事务
两阶段提交(2PC)流程:
-
Prepare 阶段:协调者询问所有节点是否可以提交。
-
Commit 阶段:所有节点确认后提交。
代码示例:
sql
-- 自动启用 2PC(默认配置)
BEGIN;
INSERT INTO node1_table VALUES (1);
INSERT INTO node2_table VALUES (2);
COMMIT; -- 若任一节点失败则自动回滚
5.2 高可用方案
同城双活架构:
-
主备节点:数据实时同步,故障切换时间 <10 秒。
-
仲裁节点:防止脑裂,需至少 3 个节点。
配置流复制:
sql
ALTER SYSTEM SET synchronous_commit = on;
SELECT pg_reload_conf();
6. 实战案例:电商高并发场景
场景需求:
-
支持秒杀活动,峰值 QPS 50,000。
-
订单数据分库分表,避免单点瓶颈。
GaussDB 方案:
-
分片设计:
sqlCREATE TABLE orders ( order_id BIGINT PRIMARY KEY, user_id INT, item_id INT ) DISTRIBUTE BY HASH(user_id); -- 按用户 ID 分片
-
缓存加速:
sqlCREATE EXTENSION redis_fdw; -- 使用 Redis 缓存热点数据
-
限流策略:
sqlALTER USER app_user SET max_connections = 100; -- 限制用户连接数
7. 常见问题与解决方案
7.1 连接数不足
报错信息:
sql
FATAL: remaining connection slots are reserved for non-replication superuser connections
解决方案:
sql
-- 临时增加连接数
ALTER SYSTEM SET max_connections = 500;
SELECT pg_reload_conf();
-- 长期优化:使用连接池(如 pgBouncer)
7.2 查询性能下降
分析步骤:
-
检查慢查询日志:
sqlALTER SYSTEM SET log_min_duration_statement = '1000ms';
-
使用
EXPLAIN ANALYZE
分析执行计划:sqlEXPLAIN ANALYZE SELECT * FROM large_table WHERE create_date > '2023-01-01';
-
添加索引优化:
sqlCREATE INDEX idx_create_date ON large_table(create_date);
附录
-
官方文档 :成长地图_云数据库 GaussDB_华为云
-
学习资源:
-
《GaussDB 性能调优指南》
-
《分布式数据库原理与实践》
-
-
工具包下载:
-
数据库监控脚本:
gaussdb_monitor_toolkit.zip
-
压力测试工具:
benchmark_kit.tar.gz
-