GBase 8s
适配迁移
文章

SQL方式查询GBase 8s表空间大小

发表于2023-06-09 13:00:011057次浏览2个评论

GBase 8s最大的逻辑存储单元是数据空间dbspace,dbspace的使用也很灵活,可以建库的时候指定默认的数据空间(create database xxx in dbspace),也可以在建表的时候指定(create table xxx in dbspace),一个表也可分布在不同的数据空间(分区表),大对象类型也可以指定到不同的数据空间(PUT子句),通过SQL的方式查询一张表的所使用的存储空间的大小呢,下面进行介绍。

1、相关系统表介绍

数据空间相关的系统表主要涉及如下几个,都在sysmaster系统库中:

  • sysdbspaces,描述数据库服务所管理的每个dbspaces

    主要涉及的几个参数如下,其余参数解释见管理员手册

    dbsnum - 描述dbspace编号

    name - 描述dbspace名称

    pagesize - 描述dbspace空间页大小,单位是B

  • sysextents,描述表有关扩展数据块分配的信息,扩展数据块是表空间分配的最小单位

    主要涉及的几个参数如下

    dbsname - 数据库名称

    tabname - 表名

    size - 扩展数据块的大小

  • systabnames,描述表所在的数据空间

    主要涉及的几个参数如下

    dbsname - 数据库名称

    tabname - 表名

    dbsnum - dbspace编号

2、表空间大小计算

从以上几个表可以看出,表空间的大小并不能准确的计算出来,但可以进行粗略估计,以分片表tab_round_robin为例,计算表空间大小需要知道表所在数据空间的页大小,及分配的extent大小

select a.tabname tabname,b.name dbsname,a.size*b.pagesize/1024 total_size_kb from sysextents a inner join (select a.tabname,b.name,b.pagesize from systabnames a inner join sysdbspaces b on a.dbsnum = b.dbsnum) b on a.tabname = b.tabname where a.tabname = 'tab_round_robin' group by 1,2,3;

 

评论

登录后才可以发表评论
用户头像
路路路发表于 9个月前
赞~
用户头像
levvel发表于 7个月前
嗯,只能说不错!