logo
GBase 8s
运维管理
文章

GBase 8s常见问题 -- no more pages/no more extents

wty
发表于2024-01-05 15:25:25413次浏览2个评论

问题现象

insert数据失败,报错no more pages或no more extents

onstat -d查看表所在的dbspace还有剩余空间

解决方法

可能是表占用的page达到上限

执行命令查询表的空间分配情况

[gbasedbt@test ~]$ oncheck -pt  testdb:table1



TBLspace Report for testdb:gbasedbt.table1

    Physical Address               6:104248
    Creation date                  12/10/2023 01:18:09
    TBLspace Flags                 902        Row Locking
                                              TBLspace contains VARCHARS
                                              TBLspace use 4 bit bit-maps
    Maximum row size               5675      
    Number of special columns      12        
    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           1         
    Number of data pages           0         
    Number of rows                 0         
    Partition partnum              6293704   
    Partition lockid               6293704   

    Extents                       
         Logical Page     Physical Page        Size Physical Pages
                    0          6:119448           4         32
...

Number of pages allocated :已分配page数

Number of pages used :已占用page数

一个非分片表page数上限是16,777,215,如果这两个值已经接近上限,可能无法再分配更多page

 

另外,extent 的最大数量是 32767,默认分配extent中包含的page会越来越多,一般不会达到上限

 

如果查询到表分配的page/extent达到上限,导致不能插入数据,则需要将表分片

每个分片都可以包含普通表的page/extent数。

alter fragment on table table1 init
FRAGMENT BY EXPRESSION
id < 100 IN datadbs01,
REMAINDER IN datadbs02;

*注意:建议操作之前备份数据库

 

评论

登录后才可以发表评论
liaosnet发表于 1 年前
"另外,extent 的最大数量是 32767,默认分配extend中包含的page会越来越多,一般不会达到上限"
这个extent的最大数量不是32767。。而是起决于页大小,partition page页的slot 5中每个区段需要10个字节来描述,还需要减掉slot 1,2,3(特殊字段描述、表描述等)和页头页尾的空间占用。在16K页中,大约15K字节可以用于描述区段,所以至多大约达到1500个区段。
wty发表于 1 年前
计算剩余可用extents数:
onchecp -pt testdb:table1
从输出中找到
TBLspace Report for testdb:gbasedbt.table1
Physical Address 1:50612
这个Physical Address是表信息的page(TBLspace)
第一个数是chunk号,第二个数是page号

执行命令查看这个page中的数据
oncheck -pP 1 50612


看里面的slot 5,这里是存extent的地方,每10个字节存储一个extent的信息
可以和oncheck -pt中输出的extents数据对比看,这10个字节记录了逻辑页、chunk号、page号
最后10个字节里chunk号、page号是空的,应该是记录下一个extent的逻辑页,前后两个逻辑页相减可得出这个extent的大小

再看最上面的数据,其中frcnt记录的是page剩余空间,用这个数除以10就可以得出这张表还可以分配多少个extent