云数据库 GAUSSDB-段页式存储函数(实验室特性)

时间:2024-01-23 20:09:00

段页式存储函数(实验室特性)

当前特性是实验室特性,使用时请联系华为工程师提供技术支持。

  • local_segment_space_info(tablespacename TEXT, databasename TEXT)

    描述:输出为当前节点,该表空间下所有ExtentGroup的使用信息。

    返回值类型:

    node_name

    节点名称

    extent_size

    该ExtentGroup的extent规格,单位是block数。

    forknum

    Fork号。

    total_blocks

    物理文件总extent数目。

    meta_data_blocks

    表空间管理的metadata占用的block数,只包括space header,map page等,不包括segment head。

    used_data_blocks

    存数据占用的extent数目。包括segment head。

    utilization

    使用的block数占总block数的百分比。即(used_data_blocks+meta_data_block)/total_blocks。

    high_water_mark

    高水位线,被分配出去的extent,最大的物理页号。超过高水位线的block都没有被使用,可以被直接回收。

    例如:

    select * from local_segment_space_info('pg_default', 'testdb');
         node_name     | extent_size | forknum | total_blocks | meta_data_blocks | used_data_blocks | utilization | high_water_mark 
    -------------------+-------------+---------+--------------+------------------+------------------+-------------+-----------------
     dn_6001_6002_6003 |           1 |       0 |        16384 |             4157 |                1 |     .253784 |            4158
     dn_6001_6002_6003 |           8 |       0 |        16384 |             4157 |                8 |     .254211 |            4165
    (2 rows)
  • global_segment_space_info(tablespacename TEXT, databasename TEXT)

    描述:效果跟local_segment_space_info类似,返回的是整个集群中所有节点上的使用信息。

  • pg_stat_segment_extent_usage(int4 tablespace oid, int4 database oid, int4 extent_type, int4 forknum)

    描述:每次返回一个ExtentGroup中,每个被分配出去的extent的使用情况。extent_type表示ExtentGroup的类型,合理取值为[1,5]的int值。在此范围外的会报error。forknum 表示fork号,合法取值为[0,4]的int值,目前只有三种值有效,数据文件为0,FSM文件为1,visibility map文件为2。

    返回值类型:

    名称

    描述

    start_block

    Extent的起始物理页号。

    extent_size

    Extent的大小。

    usage_type

    Extent的使用类型,比如segment head,data extent等。

    ower_location

    有指针指向该extent的对象的位置。比如data extent的owner就是它所属的segment的head位置。

    special_data

    该extent在它owner中的位置。该字段的数据跟使用类型有关。比如data extent的special data就是它在所属segment中的extent id。

    其中,usage_type为枚举类型,每一项的含义为:

    • Non-bucket table segment head :非hashbucket表的数据段头。
    • Non-bucket table fork head:非段页式表的fork段头。
    • Bucket table main head:hashbucket表的主表段头。
    • Bucket table map block:hashbucket表的MapBlock。
    • Bucket segment head:hashbucket表每个bucket的段头。
    • Data extent:数据块。

    例如:

    select * from pg_stat_segment_extent_usage((select oid::int4 from pg_tablespace where spcname='pg_default'), (select oid::int4 from pg_database where datname='testdb'), 1, 0);
    start_block | extent_size |       usage_type       | ower_location | special_data
    -------------+-------------+------------------------+---------------+--------------
    4157 |           1 | Bucket table main head |    4294967295 |            0
    4158 |           1 | Bucket table map block |          4157 |            0
    4159 |           1 | Bucket table map block |          4157 |            1
    4160 |           1 | Bucket table map block |          4157 |            2
    4161 |           1 | Bucket table map block |          4157 |            3
    4162 |           1 | Bucket table map block |          4157 |            4
    4163 |           1 | Bucket table map block |          4157 |            5
    4164 |           1 | Bucket table map block |          4157 |            6
    4165 |           1 | Bucket table map block |          4157 |            7
    4166 |           1 | Bucket table map block |          4157 |            8
  • local_space_shrink(tablespacename TEXT, databasename TEXT)

    描述:当前节点上对指定段页式空间做物理空间收缩。注意,目前只支持对当前连接的database做shrink。

    返回值:空

  • gs_space_shrink(int4 tablespace, int4 database, int4 extent_type, int4 forknum)

    描述:效果跟local_space_shrink类似,对指定段页式空间做物理空间收缩,但参数不同,传入的是tablespace和database的oid,extent_type为[2,5]的int值。注意:extent_type = 1表示段页式元数据,目前不支持对元数据所在的物理文件做收缩。该函数仅限工具使用,不建议用户直接使用。

    返回值:空

  • global_space_shrink(tablespacename TEXT, databasename TEXT)

    描述:在cn上执行,对整个集群上所有dn执行段页式存储空间压缩。

    注意:global_space_shrink 锁cluster,在此期间不能执行DDL操作。而local_space_shrink不会锁集群。

  • gs_stat_remain_segment_info()

    描述:在CN上执行,展示在DN节点上,因为故障等原因,残留的extent。默认只有初始用户、具有sysadmin属性的用户以及在运维模式下具有运维管理员属性的用户可以查看,其余用户需要赋权后才可以使用。只支持在主机上执行。残留extent主要分为两类:分配而未被利用的segment和分配出去而未被利用的extent。两者主要区别在于segment会包含多个extent,回收时,要将segment上的extent一并全部回收。

    返回值类型:

    名称

    描述

    node_name

    节点名称。

    space_id

    表空间ID。

    db_id

    数据库ID。

    block_id

    Extent的ID。

    type

    Extent的类型,当前有三种:ALLOC_SEGMENT|DROP_SEGMENT|SHRINK_EXTENT。

    其中type的三种类型分别表示:
    • ALLOC_SEGMENT:用户创建一张段页式表,当segment刚被分配,但是建表语句所在事务仍未提交时,节点故障,导致该segment被分配后,没有被使用。
    • DROP_SEGMENT:用户删除段页式表,当该事务成功提交,但是此表的segment页面对应的bit位未被重置,就发生掉电等故障,造成该segment未被使用,也未被释放。
    • SHRINK_EXTENT:用户对段页式表执行shrink操作,在未对空置出的extent进行释放时,发生掉电等故障,造成该extent残留,无法被重新利用。
    例如:
    select * from gs_stat_remain_segment_info();
    
         node_name     | space_id | db_id | block_id |     type      
    -------------------+----------+-------+----------+---------------
     dn_6001_6002_6003 |    16804 | 16803 |     4157 | ALLOC_SEGMENT
    (1 row)
  • gs_free_remain_segment()

    描述:清理通过函数gs_stat_remain_segment_info查询出的当前库的残留。默认只有初始用户、具有sysadmin属性的用户以及在运维模式下具有运维管理员属性的用户可以执行,其余用户需要赋权后才可以使用。只支持在主机上执行。

    返回值类型:

    名称

    描述

    node_name

    节点名称。

    result

    是否清理成功。

  • gs_local_stat_remain_segment_info()

    描述:在主DN上执行,显示当前节点的段页式残留信息。用户权限、返回值请参考gs_stat_remain_segment_info。

  • gs_local_free_remain_segment()

    描述:在主DN上执行,清理通过函数gs_local_stat_remain_segment_info查询出的当前库的残留。用户权限、返回值请参考gs_free_remain_segment。

support.huaweicloud.com/distributed-devg-v3-gaussdb/gaussdb-12-0380.html