华为云云数据库GaussDB段页式存储函数_云淘科技
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', 'postgres'); 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='postgres'), 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不会锁集群。
pg_stat_remain_segment_info()
描述:展示在当前节点上,因为故障等原因,残留的extent。残留extent主要分为两类:分配而未被利用的segment和分配出去而未被利用的extent。两者主要区别在于segment会包含多个extent,回收时,要将segment上的extent一并全部回收。
返回值类型:
名称 |
描述 |
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 pg_stat_remain_segment_info(); space_id | db_id | block_id | type ----------+-------+----------+------ 1663 | 16385| 4156| ALLOC_SEGMENT
pg_free_remain_segment(int4 spaceId, int4 dbId, int4 segmentId)
描述:释放指定的残留extent。参数取值必须为从函数pg_stat_remain_segment_info中查询获取。函数会对传入值校验,如果指定extent不在记录的残留extent中,将返回错误信息。指定的extent如果为单个extent,则只将其独自释放;如果为一个segment,则会将此segment以及此segment上记录的所有extent释放。
返回值:空
父主题: 系统管理函数
同意关联代理商云淘科技,购买华为云产品更优惠(QQ 78315851)
内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家