外观
KingBaseES 表空间管理
表空间概述
表空间定义
表空间是KingBaseES中用于管理数据存储的逻辑概念,它将数据库对象(如表、索引)映射到物理存储位置。表空间允许DBA将不同类型的数据存储在不同的物理设备上,以优化性能和管理存储。
表空间类型
KingBaseES支持以下类型的表空间:
- 系统表空间:用于存储系统数据库和系统表,如sys_catalog、information_schema等
- 用户表空间:由用户创建,用于存储用户数据
- 临时表空间:用于存储临时数据和排序结果
- UNLOGGED表空间:用于存储不记录WAL日志的表,适合临时数据
表空间的作用
- 性能优化:将热点数据存储在高性能存储设备上
- 存储管理:灵活管理不同类型的数据存储
- 备份恢复:针对不同表空间实施不同的备份策略
- 负载均衡:将数据分布到不同的存储设备上
- 空间隔离:将不同应用的数据隔离存储
表空间创建与配置
准备工作
在创建表空间前,需要完成以下准备工作:
创建物理目录:为表空间创建物理存储目录
bashmkdir -p /opt/kingbase/tablespaces/user_ts chown -R kingbase:kingbase /opt/kingbase/tablespaces chmod -R 700 /opt/kingbase/tablespaces规划表空间大小:根据数据量和增长趋势,规划表空间大小
选择存储设备:根据数据类型选择合适的存储设备
创建表空间
使用CREATE TABLESPACE语句创建表空间:
sql
-- 创建用户表空间
CREATE TABLESPACE user_ts
OWNER sys
LOCATION '/opt/kingbase/tablespaces/user_ts'
WITH (
owner = sys,
permission_bits = 0700,
random_page_cost = 1.1,
seq_page_cost = 1.0,
effective_io_concurrency = 200
);
-- 创建临时表空间
CREATE TABLESPACE temp_ts
OWNER sys
LOCATION '/opt/kingbase/tablespaces/temp_ts'
WITH (
owner = sys,
permission_bits = 0700
);
-- 创建UNLOGGED表空间
CREATE TABLESPACE unlogged_ts
OWNER sys
LOCATION '/opt/kingbase/tablespaces/unlogged_ts'
WITH (
owner = sys,
permission_bits = 0700
);配置默认表空间
配置数据库或用户的默认表空间:
sql
-- 配置数据库默认表空间
ALTER DATABASE testdb SET default_tablespace = user_ts;
-- 配置用户默认表空间
ALTER USER developer SET default_tablespace = user_ts;
-- 配置临时表空间
ALTER SYSTEM SET temp_tablespaces = 'temp_ts';
SELECT sys_reload_conf();表空间管理操作
查看表空间
查看已创建的表空间:
sql
-- 查看所有表空间
SELECT spcname, spcowner, spclocation FROM sys_tablespace;
-- 查看表空间详细信息
\db+
-- 查看表所在的表空间
SELECT table_name, tablespace_name FROM information_schema.tables WHERE table_schema = 'public';
-- 查看索引所在的表空间
SELECT indexname, tablespace FROM sys_indexes WHERE schemaname = 'public';修改表空间
修改表空间的属性:
sql
-- 修改表空间所有者
ALTER TABLESPACE user_ts OWNER TO db_admin;
-- 修改表空间位置(需要重启数据库)
ALTER TABLESPACE user_ts RENAME TO new_user_ts;
-- 修改表空间参数
ALTER TABLESPACE user_ts SET (random_page_cost = 1.2);移动数据库对象到表空间
将数据库对象移动到指定表空间:
sql
-- 将表移动到表空间
ALTER TABLE users SET TABLESPACE user_ts;
-- 将索引移动到表空间
ALTER INDEX idx_users_id SET TABLESPACE user_ts;
-- 将所有表移动到表空间
ALTER TABLE ALL TABLES IN SCHEMA public SET TABLESPACE user_ts;
-- 将所有索引移动到表空间
ALTER INDEX ALL IN SCHEMA public SET TABLESPACE user_ts;删除表空间
删除不再使用的表空间:
sql
-- 删除空表空间
DROP TABLESPACE IF EXISTS unused_ts;
-- 删除包含对象的表空间(需要先删除或移动所有对象)
-- 1. 查看表空间中的对象
SELECT * FROM sys_tables WHERE tablespace = 'user_ts';
SELECT * FROM sys_indexes WHERE tablespace = 'user_ts';
-- 2. 移动或删除对象
ALTER TABLE users SET TABLESPACE default_ts;
DROP INDEX idx_users_id;
-- 3. 删除表空间
DROP TABLESPACE user_ts;表空间监控与维护
监控表空间使用情况
监控表空间的使用情况,及时发现空间不足问题:
sql
-- 查看表空间使用情况
SELECT
spcname AS tablespace_name,
pg_size_pretty(pg_tablespace_size(spcname)) AS size,
pg_size_pretty(pg_tablespace_size(spcname) - pg_tablespace_size('template1')) AS used,
pg_size_pretty(pg_tablespace_size('template1')) AS free
FROM sys_tablespace;
-- 查看表空间中表的大小
SELECT
table_name,
pg_size_pretty(pg_total_relation_size(table_name)) AS total_size,
pg_size_pretty(pg_table_size(table_name)) AS table_size,
pg_size_pretty(pg_indexes_size(table_name)) AS index_size
FROM information_schema.tables
WHERE table_schema = 'public'
ORDER BY pg_total_relation_size(table_name) DESC;表空间维护
定期对表空间进行维护,确保性能和可靠性:
碎片整理:对频繁更新的表进行VACUUM和ANALYZE
sql-- 手动VACUUM和ANALYZE VACUUM FULL ANALYZE users;检查表空间完整性:使用
pg_checksums工具检查表空间完整性bashpg_checksums -c -D /opt/kingbase/tablespaces/user_ts备份表空间:定期备份表空间
bashsys_basebackup -D /backup/tablespaces_backup -T /opt/kingbase/tablespaces/user_ts=/backup/user_ts_backup
表空间扩容
当表空间空间不足时,需要进行扩容:
增加数据文件(如果使用文件系统表空间):
bash-- 对于文件系统表空间,可以挂载新的存储设备并创建新的表空间 mkdir -p /opt/kingbase/tablespaces/user_ts_new chown -R kingbase:kingbase /opt/kingbase/tablespaces/user_ts_new chmod -R 700 /opt/kingbase/tablespaces/user_ts_newsql-- 创建新的表空间 CREATE TABLESPACE user_ts_new LOCATION '/opt/kingbase/tablespaces/user_ts_new'; -- 将表移动到新表空间 ALTER TABLE users SET TABLESPACE user_ts_new;扩展存储卷(如果使用LVM或其他卷管理):
bash-- 扩展存储卷 lvextend -L +100G /dev/vg_data/lv_tablespaces resize2fs /dev/vg_data/lv_tablespaces
表空间最佳实践
表空间设计原则
根据数据类型设计:
- 热点数据存储在高性能存储设备上
- 冷数据存储在低成本存储设备上
- 临时数据和排序结果存储在高速存储设备上
根据访问模式设计:
- 读写频繁的表放在高性能存储上
- 只读表可以放在普通存储上
- 索引可以考虑单独存储在高性能存储上
根据备份需求设计:
- 核心数据和非核心数据分离存储
- 不同备份策略的表放在不同表空间
表空间布局建议
| 表空间类型 | 存储设备 | 用途 |
|---|---|---|
| 系统表空间 | SAS/SATA | 存储系统数据库和系统表 |
| 用户表空间 | SSD/NVMe | 存储核心业务表和索引 |
| 临时表空间 | SSD | 存储临时数据和排序结果 |
| 归档表空间 | SATA/磁带 | 存储历史数据和归档数据 |
| 索引表空间 | SSD/NVMe | 存储索引,提高查询性能 |
性能优化建议
使用多个表空间:将不同类型的数据分布到不同表空间,提高并行访问性能
合理设置表空间参数:根据存储设备类型调整表空间参数
sql-- 对于SSD存储 ALTER TABLESPACE ssd_ts SET (random_page_cost = 1.1, effective_io_concurrency = 200); -- 对于HDD存储 ALTER TABLESPACE hdd_ts SET (random_page_cost = 4.0, effective_io_concurrency = 2);避免单个表空间过大:将大表拆分为多个表或使用分区表,分布到不同表空间
监控表空间使用情况:定期监控表空间使用情况,及时扩容
定期维护:定期对表空间进行VACUUM和ANALYZE,减少碎片
版本差异
| 特性 | V8 R6 | V8 R7 |
|---|---|---|
| 表空间创建语法 | 基础语法 | 增强语法,支持更多参数 |
| 表空间参数 | 基本参数 | 更多性能相关参数 |
| 表空间重命名 | 支持 | 支持 |
| 表空间移动 | 不支持 | 支持(需要重启数据库) |
| 表空间监控视图 | 基础视图 | 更丰富的监控视图 |
| 表空间检查工具 | 基础工具 | 增强的检查工具 |
| 分区表表空间 | 基础支持 | 更好的支持,可指定分区表空间 |
| 临时表空间 | 支持 | 增强支持,可配置多个临时表空间 |
常见问题(FAQ)
Q: 如何选择表空间的存储设备?
A: 选择表空间存储设备时,需要考虑以下因素:
- 数据类型和访问模式
- 性能要求
- 成本预算
- 可靠性要求
建议:
- 热点数据和索引使用SSD/NVMe
- 普通数据使用SAS
- 归档数据使用SATA或磁带
Q: 如何将现有表移动到新表空间?
A: 可以使用ALTER TABLE语句将现有表移动到新表空间:
sql
ALTER TABLE table_name SET TABLESPACE new_tablespace;注意:移动表会锁定表,建议在业务低峰期进行。
Q: 表空间满了怎么办?
A: 表空间满了可以采取以下措施:
- 清理无用数据
- 移动部分表到其他表空间
- 扩容存储设备
- 创建新表空间并移动数据
Q: 如何监控表空间使用情况?
A: 可以使用以下方法监控表空间使用情况:
- 查询
sys_tablespace和相关视图 - 使用KingBaseES Manager(KEM)监控
- 配置监控工具如Prometheus+Grafana
- 定期生成表空间使用报告
Q: 表空间可以跨主机使用吗?
A: 表空间默认是本地的,不支持跨主机使用。如果需要跨主机共享表空间,可以考虑使用共享存储设备,如SAN、NAS等。
Q: 如何备份表空间?
A: 可以使用以下方法备份表空间:
- 使用
sys_basebackup进行基础备份 - 使用
sys_dump进行逻辑备份 - 使用第三方备份工具
- 对存储设备进行快照备份
Q: 临时表空间的作用是什么?
A: 临时表空间用于存储临时数据,如排序结果、临时表等。配置专门的临时表空间可以提高排序性能,避免影响其他数据的存储。
Q: 如何优化表空间性能?
A: 优化表空间性能的方法:
- 根据存储设备类型调整表空间参数
- 将热点数据和索引存储在高性能存储上
- 定期进行VACUUM和ANALYZE
- 避免单个表空间过大
- 使用多个表空间分布数据
Q: 表空间和数据文件的关系是什么?
A: 表空间是逻辑概念,数据文件是物理概念。一个表空间对应一个或多个数据文件,数据库对象存储在表空间中,实际物理存储在数据文件中。
Q: 如何删除表空间?
A: 删除表空间的步骤:
- 查看表空间中的所有对象
- 移动或删除这些对象
- 使用
DROP TABLESPACE语句删除表空间
总结
表空间是KingBaseES中重要的存储管理机制,通过合理的表空间设计和管理,可以提高数据库性能、优化存储资源、简化备份恢复操作。DBA应根据业务需求和存储设备情况,设计合适的表空间布局,定期监控和维护表空间,确保数据库的高效运行。
表空间管理的关键是根据数据类型、访问模式和备份需求,将数据分布到不同的表空间,并根据存储设备类型调整表空间参数。同时,需要定期监控表空间使用情况,及时扩容和维护,确保表空间的可靠性和性能。
