【转载“GBase 8s数据库”公众号】GBase 8s 数据空间(Dbspace)管理指南
数据空间(Dbspace)是 GBase 8s 数据库的逻辑存储结构,所有数据库对象均存储于指定的数据空间内。本文系统梳理数据空间的查看、创建、修改与删除操作。
一、数据空间概述
在 GBase 8s 中,Dbspace 是数据库对象(表、索引等)的逻辑存储容器。一个 Dbspace 由一个或多个 chunk(物理数据文件)组成,所有数据库对象都必须指定一个存放的 Dbspace。
管理 Dbspace 有两种方式:SQL 管理 API 和 onspaces 命令行工具,支持创建、删除、扩展等多种操作,两种方式底层机制一致,可根据运维场景选择。
权限要求:Dbspace 的创建、修改、删除等管理操作属于实例级管理行为,仅数据库管理员(如 gbasedbt 用户或具有 DBSA 权限的角色)可执行,普通数据库用户无权操作。
二、查看数据空间
2.1 SQL 查询方式
sysmaster 数据库下执行查询 SQL:
SELECT d.dbsnum, trim(d.name) name, d.pagesize,
format_units(sum(c.chksize),'P') dbs_size
FROM sysmaster:sysdbspaces d, sysmaster:syschunks c
WHERE d.dbsnum = c.dbsnum
GROUP BY 1, 2, 3
ORDER BY 1;
输出示例:
| dbsnum | name | pagesize | dbs_size |
|---|---|---|---|
| 1 | rootdbs | 2048 | 154 MB |
| 2 | plogdbs | 2048 | 64.0 MB |
| 3 | llogdbs | 2048 | 64.0 MB |
| 4 | datadbs1 | 2048 | 64.0 MB |
| 5 | tmpdbspace | 2048 | 64.0 MB |
| 6 | sbspace1 | 2048 | 64.0 MB |
format_units 函数可将 KB 自动换算为 MB、GB 等可读单位。
2.2 onstat 命令方式
[gbasedbt@node2 ~]$ onstat -d
ol_gbasedbt1210_4: On-Line -- Up 00:04:27 -- 2064448 Kbytes
Dbspaces
address number flags fchunk nchunks pgsize flags owner name
b5a8d080 1 0x70001 1 1 2048 N BA gbasedbt rootdbs
b5be5868 2 0x1070001 2 1 2048 N PBA gbasedbt plogdbs
b629f080 3 0x60001 3 1 2048 N BA gbasedbt llogdbs
bebc9080 4 0x60001 4 1 2048 N BA gbasedbt datadbs1
bebdc080 5 0x42001 5 1 2048 N TBA gbasedbt tmpdbspace
bebdf080 6 0x68001 6 1 2048 N SBA gbasedbt sbspace1
6 active, 2047 maximum
Chunks
address chunk/dbs offset size free bpages flags pathname
b5a90080 1 1 0 78848 55198 PO-B-- /data/gbase/rootdbs
bebe5080 2 2 0 32768 0 PO-BE- /data/gbase/plog_p_1
b5a8d2d0 3 3 0 32768 15 PO-BE- /data/gbase/llog_p_1
b629f2d0 4 4 0 32768 32715 PO-B-- /data/gbase/datadbs1_p_1
bebd92d0 5 5 0 32768 32556 PO-BE- /data/gbase/tmpdbspace_p_1
bebdc2d0 6 6 0 32768 23802 23802 POSB-- /data/gbase/sbspace1_p_1
Metadata 1745 8466 1745
6 active, 32766 maximum
NOTE: The values in the "size" and "free" columns for DBspace chunks are
displayed in terms of "pgsize" of the DBspace to which they belong.
Expanded chunk capacity mode: always
该命令输出包含两部分:
- Dbspaces:展示各 Dbspace 的编号、标志、chunk 数、页大小、所有者等信息
- Chunks:展示各 chunk 的序号、所属 Dbspace、偏移量、大小、空闲页数、标志及路径
提示:
onstat -d中的size和free列以所属 Dbspace 的页大小为单位显示,需注意单位换算。例如,页大小为 16KB 时,size列显示 524288 对应实际空间为 8GB(524288 × 16KB)。
三、创建数据空间
3.1 SQL 管理 API 方式
在 sysadmin 数据库中执行 task() 或 admin() 函数:
EXECUTE FUNCTION task('create dbspace','datadbs2','/data/gbase/datachk2','1024000','0','16');
参数说明:
- 第 1 个参数:操作类型(
create dbspace) - 第 2 个参数:Dbspace 名称
- 第 3 个参数:数据文件路径
- 第 4 个参数:文件大小(KB)
- 第 5 个参数:偏移量(通常为 0)
- 第 6 个参数:页大小(KB,Linux 下默认 2KB,最大 16KB,须为 2KB 的倍数)
3.2 onspaces 命令行方式
# 1. 创建数据文件并设置权限
[gbasedbt@node2 ~]$ touch /data/gbase/datachk3
[gbasedbt@node2 ~]$ chmod 660 /data/gbase/datachk3
[gbasedbt@node2 ~]$ chown gbasedbt:gbasedbt /data/gbase/datachk3
# 2. 创建 Dbspace
[gbasedbt@node2 ~]$ onspaces -c -d datadbs3 -p /data/gbase/datachk3 -o 0 -s 1024000 -k 16
参数说明:
-c:创建(create)-d:Dbspace 名称-p:数据文件路径-o:偏移量-s:大小(KB)-k:页大小(KB)
注意:执行 onspaces 前需确保数据文件(chunk)已存在且权限为
660,所有者和组均为gbasedbt。权限不满足此条件时,onspaces命令将执行失败。
四、修改数据空间
4.1 扩展现有 chunk(SQL API 方式)
在 sysadmin 数据库中执行 task() 或 admin() 函数将现有 chunk 标记为可扩展,并指定扩展大小:
-- 设置 chunk 序号为 4 的数据文件可扩展
EXECUTE FUNCTION task('modify chunk extendable on', 4);
-- 扩展 chunk 序号为 4 的数据文件,增加 512000 KB(前提为该chunk已被设置为可扩展)
EXECUTE FUNCTION task('modify chunk extend', 4, 512000);
4.2 添加新 chunk
当现有 Dbspace 容量不足时,可通过添加新 chunk 进行扩展。
SQL 方式:
在 sysadmin 数据库中执行 task() 或 admin() 函数:
EXECUTE FUNCTION task('add chunk','datadbs1','/data/gbase/datachk1_2','512000','0');
onspaces 方式:
[gbasedbt@node2 ~]$ touch /data/gbase/datachk1_3
[gbasedbt@node2 ~]$ chmod 660 /data/gbase/datachk1_3
[gbasedbt@node2 ~]$ chown gbasedbt:gbasedbt /data/gbase/datachk1_3
[gbasedbt@node2 ~]$ onspaces -a datadbs1 -p /data/gbase/datachk1_3 -o 0 -s 512000
五、删除数据空间
删除操作分为 删除 chunk 和 删除整个 Dbspace 两个层级,均要求目标空间内无数据残留。
5.1 删除 chunk
SQL 方式:
EXECUTE FUNCTION task('drop chunk','datadbs1','/data/gbase/datachk1_3','0');
onspaces 方式:
[gbasedbt@node2 ~]$ onspaces -d datadbs1 -p /data/gbase/datachk1_2 -o 0 -y
5.2 删除整个 Dbspace
SQL 方式:
EXECUTE FUNCTION task('drop dbspace','datadbs2');
onspaces 方式:
[gbasedbt@node2 ~]$ onspaces -d datadbs3 -y
重要提示:
- chunk 或 Dbspace 中必须无数据,才允许删除;
- 删除 Dbspace 后,对应的操作系统文件不会自动删除,需手动清理;
- 使用
-y参数可跳过确认提示,适用于脚本化运维场景。
六、操作方式对比
| 操作类型 | SQL 管理 API | onspaces 命令 | 备注 |
|---|---|---|---|
| 创建 Dbspace | ✅ 支持 | ✅ 支持 | 两者等价 |
| 查看 Dbspace | ✅ 支持(SQL 查询) | ✅ 支持(onstat -d) | SQL 方式更灵活直观 |
| 扩展现有 chunk | ✅ 支持 | ❌ 不支持 | 仅 SQL API 支持 |
| 添加新 chunk | ✅ 支持 | ✅ 支持 | 两者等价 |
| 删除 chunk | ✅ 支持 | ✅ 支持 | 两者等价 |
| 删除 Dbspace | ✅ 支持 | ✅ 支持 | 两者等价 |
七、总结
数据空间管理是 GBase 8s DBA 的基础技能。本文从查看、创建、修改、删除四个维度,系统梳理了 SQL 管理 API 与 onspaces 命令行两种操作方式,并进行了参数释义和注意事项说明。
在实际生产环境中,建议遵循以下原则:
- 分散存储:将物理日志、逻辑日志、业务数据分别存放于独立 Dbspace,避免 I/O 争用;
- 预留扩展:创建 Dbspace 时预留一定余量,或启用 chunk 自动扩展功能,避免空间不足导致业务中断;
- 定期巡检:通过
onstat -d或 SQL 查询监控各 Dbspace 使用率,及时扩容。
掌握这些操作,将帮助你从容应对 GBase 8s 的存储管理挑战,为数据库的稳定运行保驾护航。
热门帖子
- 12025-12-01浏览数:183726
- 22023-05-09浏览数:26431
- 42023-09-25浏览数:20095
- 52020-05-11浏览数:18821