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