GBASE南大通用数据库GBase 8s常见问题讲堂 --查看表中数据量与表占用空间

本文摘自GBASE南大通用社区,by:wty,原文请点击:GBase 8s常见问题 -- 查看表中数据量与表占用空间|GBASE社区|天津南大通用数据技术股份有限公司|GBASE-致力于成为用户最信赖的数据库产品供应商

问题现象

systables系统表中的nrows显示数据量与表中实际数据量不符。

找不到哪里记录表和数据库占用空间大小。

解决方法

systables系统表中存放的只是统计数据,需要执行update statistics(统计更新)后才能显示真实行数。可通过以下方法查看真实行数。

1. 非分片表

非分片表在systables中存储了partnum,使用这个值在sysmaster系统库中的sysptnhdr中的partnum连接,表中当前数据行数。

select  t.tabname,t.partnum,p.nrows 
from systables t, sysmaster:sysptnhdr p 
where  t.partnum=p.partnum
and t.tabname="tab1";

2.分片表

分片表在systables中的partnum值为0,每个分片的partnum在sysfragments中的partn里,需要将systables和sysfragments使用tabid连接,再与sysmaster系统库中的sysptnhdr连接查询行数。

select t.tabname,t.partnum,f.partition,p.nrows
from sysfragments f, systables t, sysmaster:sysptnhdr p
where f.tabid = t.tabid
and f.partn = p.partnum
and t.tabname = 'tab2';

3.使用数据库命令查询表信息

也可以使用oncheck -pt命令查询表的更详细信息,每个分片都由一组数据输出,Number of rows就是这个分片中的数据条数

[gbasedbt@test dbs_351]$ oncheck -pt testdb:tab2
Your evaluation license will expire on 2025-01-14 00:00:00



TBLspace Report for testdb:gbasedbt.tab2

                  Table fragment partition datadbs1 in DBspace datadbs1

    Physical Address               6:6032
    Creation date                  01/18/2024 13:26:25
    TBLspace Flags                 902        Row Locking
                                              TBLspace contains VARCHARS
                                              TBLspace use 4 bit bit-maps
    Maximum row size               26        
    Number of special columns      1         
    Number of keys                 0         
    Number of extents              1         
    Current serial value           1         
    Current SERIAL8 value          1         
    Current BIGSERIAL value        1         
    Current REFID value            1         
    Pagesize (k)                   16        
    First extent size              4         
    Next extent size               4         
    Number of pages allocated      4         
    Number of pages used           2         
    Number of data pages           1         
    Number of rows                 4         
    Partition partnum              6291591   
    Partition lockid               6291591   

    Extents                       
         Logical Page     Physical Page        Size Physical Pages
                    0         6:1763656           4         32

                  Table fragment partition datadbs2 in DBspace datadbs2

    Physical Address               7:40
    Creation date                  01/18/2024 13:26:25
    TBLspace Flags                 902        Row Locking
                                              TBLspace contains VARCHARS
                                              TBLspace use 4 bit bit-maps
    Maximum row size               26        
    Number of special columns      1         
    Number of keys                 0         
    Number of extents              1         
    Current serial value           1         
    Current SERIAL8 value          1         
    Current BIGSERIAL value        1         
    Current REFID value            1         
    Pagesize (k)                   16        
    First extent size              4         
    Next extent size               4         
    Number of pages allocated      4         
    Number of pages used           2         
    Number of data pages           1         
    Number of rows                 4         
    Partition partnum              7340034   
    Partition lockid               6291591   

    Extents                       
         Logical Page     Physical Page        Size Physical Pages
                    0             7:424           4         32

4.查询表占用空间大小

从oncheck -pt输出的信息中,可以看到几个值:

Pagesize (k)                   16        页大小(kb)
Number of pages allocated      4         已分配页数
Number of pages used           2         已使用页数
Number of data pages           1         数据页数

我们使用 已分配页数 乘 页大小 就可以算出这一个分片占用了数据库的多少空间

已分配页数是sysptnhdr中的nptotal,页大小是sysptnhdr中的pagesize

所以我们可以改造一下查询行数的SQL,查询表在数据库中占用的空间

select t.tabname,t.partnum,f.partition,p.nptotal*p.pagesize total_size
from systables t ,sysfragments f, sysmaster:sysptnhdr p
where f.tabid = t.tabid
and f.partn = p.partnum
and t.tabname = 'tab2';

5.查询数据库占用空间大小

上面的几种查询都是使用本库的systables作为表的基本数据作查询,一次只能查询一个库的表信息,如果我们需要查询实例中所有库的信息,就不太方便了。并且数据库中不只有表会占用很多空间,索引也会占用不少空间,所以要查数据库占用空间大小就不能再像前面一样使用systables查询了。

这时候我们可以使用sysmaster系统库中的systabnames表与sysptnhdr连接筛选数据库名和表名

按库名、表名统计:

select b.dbsname database,b.tabname,a.pagesize,
sum(a.nptotal)*a.pagesize size_allocated,sum(a.npused)*a.pagesize size_used
from sysmaster:sysptnhdr a,sysmaster:systabnames b
where a.partnum = b.partnum
and b.dbsname='testdb'
group by database,tabname,pagesize

按库名统计:

select b.dbsname database,a.pagesize,
sum(a.nptotal)*a.pagesize size_allocated,sum(a.npused)*a.pagesize size_used
from sysmaster:sysptnhdr a,sysmaster:systabnames b
where a.partnum = b.partnum
and b.dbsname='testdb'
group by database,pagesize

也可以再使用FORMAT_UNITS函数来得到更易读的数值

select b.dbsname database,a.pagesize,
FORMAT_UNITS(sum(a.nptotal)*a.pagesize) size_allocated,FORMAT_UNITS(sum(a.npused)*a.pagesize) size_used
from sysmaster:sysptnhdr a,sysmaster:systabnames b
where a.partnum = b.partnum
and b.dbsname='testdb'
group by database,pagesize

你可能感兴趣的:(数据库,GBASE南大通用,GBASE)