opengauss教程FG012-openGauss表空间与存储管理
目录大纲
Part01-基础概念与理论知识
1.1 表空间概述
表空间是openGauss数据库中用于管理数据存储的逻辑概念,了解表空间的概念和管理方法对于数据库的存储管理至关重要。风哥教程参考opengauss官方文档,表空间具有以下特点:
- 逻辑存储:表空间是逻辑存储单元,对应物理存储路径
- 数据组织:可以将不同类型的数据存储在不同的表空间中
- 性能优化:通过表空间可以将数据分布在不同的存储设备上,提高性能
- 管理便利:便于数据的管理和维护
1.2 存储结构
openGauss的存储结构包括以下几个层次:
- 表空间:逻辑存储单元,对应物理存储路径
- 数据库:包含多个模式和对象
- 模式:包含表、视图、索引等对象
- 表:存储实际数据
- 数据文件:物理存储文件
1.3 表空间类型
openGauss的表空间主要包括以下类型:
- 系统表空间:
- pg_default:默认表空间,存储系统表和默认用户表
- pg_global:存储全局系统表
- 用户表空间:用户创建的表空间,用于存储用户数据
- 临时表空间:存储临时数据
- UNDO表空间:存储回滚数据
风哥提示:合理的表空间规划可以提高数据库性能和管理效率。
Part02-生产环境规划与建议
2.1 表空间规划
生产环境表空间规划
- 系统表空间:
- 使用默认表空间存储系统数据
- 确保系统表空间有足够的空间
- 用户表空间:
- 按照数据类型和访问模式创建不同的表空间
- 例如:创建专门的表空间存储大表、索引等
- 临时表空间:
- 创建独立的临时表空间
- 使用高速存储设备
- UNDO表空间:
- 创建独立的UNDO表空间
- 根据事务量大小调整空间大小
2.2 存储策略
生产环境的存储策略建议:
- 存储设备选择:
- 系统表空间:使用SSD存储
- 用户表空间:根据数据重要性和访问频率选择存储设备
- 临时表空间:使用高速存储设备
风哥提示:
- RAID配置:
- 系统表空间:RAID 10
- 用户表空间:RAID 10或RAID 5
- 临时表空间:RAID 0或RAID 10
- 空间管理:
- 预留足够的空间余量
- 定期监控空间使用情况
- 制定空间扩展计划
2.3 性能优化建议
表空间和存储的性能优化建议:
- 数据分布:
- 将热点数据存储在高速存储设备上
- 将不常访问的数据存储在大容量存储设备上
- I/O均衡:学习交流加群风哥微信: itpux-com
- 将不同表空间分布在不同的存储设备上
- 避免单一存储设备的I/O瓶颈
- 文件系统选择:
- 使用ext4或xfs文件系统
- 合理设置文件系统参数
Part03-生产环境项目实施方案
3.1 表空间创建与管理
# 创建表空间
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U opengauss
Password for user opengauss:
gsql ((openGauss 5.0.0 build 12345) compiled at 2024-01-01 00:00:00)
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type “help” for help.
fgedudb=# CREATE TABLESPACE fgedutbs LOCATION ‘/opengauss/fgdata/tablespaces/fgedutbs’;
CREATE TABLESPACE
fgedudb=# CREATE TABLESPACE fgedu_idx_tbs LOCATION ‘/opengauss/fgdata/tablespaces/fgedu_idx_tbs’;
CREATE TABLESPACE
fgedudb=# CREATE TABLESPACE fgedu_temp_tbs LOCATION ‘/opengauss/fgdata/tablespaces/fgedu_temp_tbs’;
CREATE TABLESPACE
# 修改表空间
fgedudb=# ALTER TABLESPACE fgedutbs RENAME TO fgedu_data_tbs;
ALTER TABLESPACE
# 删除表空间
fgedudb=# DROP TABLESPACE IF EXISTS fgedu_temp_tbs;
DROP TABLESPACE
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U opengauss
Password for user opengauss:
gsql ((openGauss 5.0.0 build 12345) compiled at 2024-01-01 00:00:00)
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type “help” for help.
fgedudb=# CREATE TABLESPACE fgedutbs LOCATION ‘/opengauss/fgdata/tablespaces/fgedutbs’;
CREATE TABLESPACE
fgedudb=# CREATE TABLESPACE fgedu_idx_tbs LOCATION ‘/opengauss/fgdata/tablespaces/fgedu_idx_tbs’;
CREATE TABLESPACE
fgedudb=# CREATE TABLESPACE fgedu_temp_tbs LOCATION ‘/opengauss/fgdata/tablespaces/fgedu_temp_tbs’;
CREATE TABLESPACE
# 修改表空间
fgedudb=# ALTER TABLESPACE fgedutbs RENAME TO fgedu_data_tbs;
ALTER TABLESPACE
# 删除表空间
fgedudb=# DROP TABLESPACE IF EXISTS fgedu_temp_tbs;
DROP TABLESPACE
3.2 存储监控与管理
# 查看表空间信息
学习交流加群风哥QQ113257174
fgedudb=# \db
List of tablespaces
Name | Owner | Location
——————–+———-+———————————-
fgedu_data_tbs | opengauss | /opengauss/fgdata/tablespaces/fgedutbs
fgedu_idx_tbs | opengauss | /opengauss/fgdata/tablespaces/fgedu_idx_tbs
pg_default | opengauss |
pg_global | opengauss |
(4 rows)
# 查看表空间使用情况
fgedudb=# SELECT
spcname AS tablespace_name,
pg_size_pretty(pg_tablespace_size(spcname)) AS size
FROM
pg_tablespace;
tablespace_name | size
—————-+——–
fgedu_data_tbs | 8192 kB
fgedu_idx_tbs | 8192 kB
pg_default | 16 MB
pg_global | 576 kB
(4 rows)
学习交流加群风哥QQ113257174
fgedudb=# \db
List of tablespaces
Name | Owner | Location
——————–+———-+———————————-
fgedu_data_tbs | opengauss | /opengauss/fgdata/tablespaces/fgedutbs
fgedu_idx_tbs | opengauss | /opengauss/fgdata/tablespaces/fgedu_idx_tbs
pg_default | opengauss |
pg_global | opengauss |
(4 rows)
# 查看表空间使用情况
fgedudb=# SELECT
spcname AS tablespace_name,
pg_size_pretty(pg_tablespace_size(spcname)) AS size
FROM
pg_tablespace;
tablespace_name | size
—————-+——–
fgedu_data_tbs | 8192 kB
fgedu_idx_tbs | 8192 kB
pg_default | 16 MB
pg_global | 576 kB
(4 rows)
3.3 空间回收与优化
# 清理表空间
fgedudb=# VACUUM FULL;
VACUUM
# 重建索引
fgedudb=# REINDEX TABLE fgedu_test;
REINDEX
# 查看表空间碎片
fgedudb=# SELECT
relname AS table_name,
pg_size_pretty(pg_total_relation_size(relid)) AS total_size,
pg_size_pretty(pg_indexes_size(relid)) AS index_size
FROM
pg_stat_user_tables
ORDER BY
更多视频教程www.fgedu.net.cn
pg_total_relation_size(relid) DESC
LIMIT 10;
fgedudb=# VACUUM FULL;
VACUUM
# 重建索引
fgedudb=# REINDEX TABLE fgedu_test;
REINDEX
# 查看表空间碎片
fgedudb=# SELECT
relname AS table_name,
pg_size_pretty(pg_total_relation_size(relid)) AS total_size,
pg_size_pretty(pg_indexes_size(relid)) AS index_size
FROM
pg_stat_user_tables
ORDER BY
更多视频教程www.fgedu.net.cn
pg_total_relation_size(relid) DESC
LIMIT 10;
Part04-生产案例与实战讲解
4.1 表空间创建实战
# 创建表空间目录
[root@fgedu.net.cn ~]# mkdir -p /opengauss/fgdata/tablespaces/fgedu_data_tbs
[root@fgedu.net.cn ~]# mkdir -p /opengauss/fgdata/tablespaces/fgedu_idx_tbs
[root@fgedu.net.cn ~]# chown -R opengauss:dbgrp /opengauss/fgdata/tablespaces
# 创建表空间
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U opengauss -c “CREATE TABLESPACE fgedu_data_tbs LOCATION ‘/opengauss/fgdata/tablespaces/fgedu_data_tbs’;
“
Password for user opengauss:
CREATE TABLESPACE
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U opengauss -c “CREATE TABLESPACE fgedu_idx_tbs LOCATION ‘/opengauss/fgdata/tablespaces/fgedu_idx_tbs’;
“
Password for user opengauss:
CREATE TABLESPACE
# 在表空间中创建表
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U opengauss -c “CREATE TABLE fgedu_employee (id serial primary key, name varchar(50), age int, department varchar(50)) TABLESPACE fgedu_data_tbs;
“
Password for user opengauss:
CREATE TABLE
# 在表空间中创建索引
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U opengauss -c “CREATE INDEX idx_fgedu_employee_name ON fgedu_employee(name) TABLESPACE fgedu_idx_tbs;
“
Password for user opengauss:
CREATE INDEX
[root@fgedu.net.cn ~]# mkdir -p /opengauss/fgdata/tablespaces/fgedu_data_tbs
[root@fgedu.net.cn ~]# mkdir -p /opengauss/fgdata/tablespaces/fgedu_idx_tbs
[root@fgedu.net.cn ~]# chown -R opengauss:dbgrp /opengauss/fgdata/tablespaces
# 创建表空间
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U opengauss -c “CREATE TABLESPACE fgedu_data_tbs LOCATION ‘/opengauss/fgdata/tablespaces/fgedu_data_tbs’;
“
Password for user opengauss:
CREATE TABLESPACE
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U opengauss -c “CREATE TABLESPACE fgedu_idx_tbs LOCATION ‘/opengauss/fgdata/tablespaces/fgedu_idx_tbs’;
“
Password for user opengauss:
CREATE TABLESPACE
# 在表空间中创建表
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U opengauss -c “CREATE TABLE fgedu_employee (id serial primary key, name varchar(50), age int, department varchar(50)) TABLESPACE fgedu_data_tbs;
“
Password for user opengauss:
CREATE TABLE
# 在表空间中创建索引
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U opengauss -c “CREATE INDEX idx_fgedu_employee_name ON fgedu_employee(name) TABLESPACE fgedu_idx_tbs;
“
Password for user opengauss:
CREATE INDEX
4.2 存储监控实战
# 查看表空间使用情况
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U opengauss -c “SELECT spcname AS tablespace_name, pg_size_pretty(pg_tablespace_size(spcname)) AS size FROM pg_tablespace;
“
Password for user opengauss:
tablespace_name | size
—————-+——–
fgedu_data_tbs | 16 MB
fgedu_idx_tbs | 8192 kB
pg_default | 16 MB
pg_global | 576 kB
更多学习教程公众号风哥教程itpux_com
(4 rows)
# 查看表使用情况
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U opengauss -c “SELECT relname AS table_name, pg_size_pretty(pg_total_relation_size(relid)) AS total_size, pg_size_pretty(pg_indexes_size(relid)) AS index_size FROM pg_stat_user_tables ORDER BY pg_total_relation_size(relid) DESC;
“
Password for user opengauss:
table_name | total_size | index_size
————-+————+————
fgedu_employee | 16 kB | 16 kB
fgedu_test | 16 kB | 16 kB
(2 rows)
# 查看文件系统使用情况
[root@fgedu.net.cn ~]# df -h /opengauss
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 50G 10G 40G 20% /
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U opengauss -c “SELECT spcname AS tablespace_name, pg_size_pretty(pg_tablespace_size(spcname)) AS size FROM pg_tablespace;
“
Password for user opengauss:
tablespace_name | size
—————-+——–
fgedu_data_tbs | 16 MB
fgedu_idx_tbs | 8192 kB
pg_default | 16 MB
pg_global | 576 kB
更多学习教程公众号风哥教程itpux_com
(4 rows)
# 查看表使用情况
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U opengauss -c “SELECT relname AS table_name, pg_size_pretty(pg_total_relation_size(relid)) AS total_size, pg_size_pretty(pg_indexes_size(relid)) AS index_size FROM pg_stat_user_tables ORDER BY pg_total_relation_size(relid) DESC;
“
Password for user opengauss:
table_name | total_size | index_size
————-+————+————
fgedu_employee | 16 kB | 16 kB
fgedu_test | 16 kB | 16 kB
(2 rows)
# 查看文件系统使用情况
[root@fgedu.net.cn ~]# df -h /opengauss
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 50G 10G 40G 20% /
4.3 空间优化实战
# 插入测试数据
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U opengauss -c “INSERT INTO fgedu_employee (name, age, department) SELECT ‘Employee’ || i, 20 + (i % 30), ‘Department’ || (i % 10) FROM generate_series(1, 10000) AS i;
“
Password for user opengauss:
INSERT 0 10000
# 查看表大小
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U opengauss -c “SELECT pg_size_pretty(pg_total_relation_size(‘fgedu_employee’));
“
Password for user opengauss:
pg_size_pretty
—————-
576 kB
(1 row)
# 删除部分数据
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U opengauss -c “DELETE FROM fgedu_employee WHERE id > 5000;
“
from DB视频:www.itpux.com
Password for user opengauss:
DELETE 5000
# 查看表大小(仍然很大)
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U opengauss -c “SELECT pg_size_pretty(pg_total_relation_size(‘fgedu_employee’));
“
Password for user opengauss:
pg_size_pretty
—————-
576 kB
(1 row)
# 执行VACUUM FULL回收空间
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U opengauss -c “VACUUM FULL fgedu_employee;”
Password for user opengauss:
VACUUM
# 查看表大小(空间已回收)
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U opengauss -c “SELECT pg_size_pretty(pg_total_relation_size(‘fgedu_employee’));
“
Password for user opengauss:
pg_size_pretty
—————-
288 kB
(1 row)
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U opengauss -c “INSERT INTO fgedu_employee (name, age, department) SELECT ‘Employee’ || i, 20 + (i % 30), ‘Department’ || (i % 10) FROM generate_series(1, 10000) AS i;
“
Password for user opengauss:
INSERT 0 10000
# 查看表大小
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U opengauss -c “SELECT pg_size_pretty(pg_total_relation_size(‘fgedu_employee’));
“
Password for user opengauss:
pg_size_pretty
—————-
576 kB
(1 row)
# 删除部分数据
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U opengauss -c “DELETE FROM fgedu_employee WHERE id > 5000;
“
from DB视频:www.itpux.com
Password for user opengauss:
DELETE 5000
# 查看表大小(仍然很大)
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U opengauss -c “SELECT pg_size_pretty(pg_total_relation_size(‘fgedu_employee’));
“
Password for user opengauss:
pg_size_pretty
—————-
576 kB
(1 row)
# 执行VACUUM FULL回收空间
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U opengauss -c “VACUUM FULL fgedu_employee;”
Password for user opengauss:
VACUUM
# 查看表大小(空间已回收)
[opengauss@fgedu.net.cn ~]$ gsql -d fgedudb -U opengauss -c “SELECT pg_size_pretty(pg_total_relation_size(‘fgedu_employee’));
“
Password for user opengauss:
pg_size_pretty
—————-
288 kB
(1 row)
Part05-风哥经验总结与分享
5.1 表空间管理最佳实践
- 表空间规划:
- 根据数据类型和访问模式创建不同的表空间
- 将不同类型的数据存储在不同的表空间中
- 合理分配存储设备
- 空间监控:
- 定期监控表空间使用情况
- 设置空间使用告警
- 及时处理空间不足问题
- 空间回收:
- 定期执行VACUUM操作
- 对于大表,使用VACUUM FULL
- 重建索引优化空间使用
5.2 存储管理要点
- 存储设备选择:
- 根据数据重要性和访问频率选择存储设备
- 使用SSD存储热点数据
- 使用大容量存储设备存储冷数据
- RAID配置:
- 选择合适的RAID级别
- 考虑性能和可靠性的平衡
- 文件系统管理:
- 选择合适的文件系统
- 合理设置文件系统参数
- 定期检查文件系统状态
5.3 常见问题与解决方案
常见表空间与存储问题及解决方法
- 问题1:表空间不足
- 症状:插入数据时提示表空间不足
- 解决方案:扩展表空间,清理无用数据,执行VACUUM操作
- 问题2:表空间创建失败
- 症状:创建表空间时提示权限不足或目录不存在
- 解决方案:确保目录存在且数据库用户有写权限
- 问题3:存储I/O性能瓶颈
- 症状:数据库操作缓慢,I/O等待时间长
- 解决方案:优化存储设备,使用RAID 10,将不同表空间分布在不同存储设备上
- 问题4:空间碎片过多
- 症状:表空间使用率高,但实际数据量不大
- 解决方案:执行VACUUM FULL操作,重建索引
风哥提示:表空间与存储管理是数据库管理的重要组成部分,合理的表空间规划和存储管理可以提高数据库性能和可靠性。在生产环境中,应该建立完善的表空间管理和存储监控机制,确保数据库的稳定运行。
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
