资源管理之Schema空间管控

举报
直线歪了 发表于 2025/05/27 22:49:01 2025/05/27
【摘要】 1、Schema空间管控简介    GaussDB(DWS)存储资源管理上提供了Schema级别的空间管控能力,一方面可以实现单实例上的空间管控,避免数据库只读和磁盘满的情况出现;另一方面将空间管控和用户、队列解耦,实现了空间管控和权限的分离,降低用户使用空间管控的难度。    通过创建Schema时指定存储空间的大小实现对存储资源的管理,仅限制永久表存储空间(PREM SPACE)。Sch...

1、Schema空间管控简介

    GaussDB(DWS)存储资源管理上提供了Schema级别的空间管控能力,一方面可以实现单实例上的空间管控,避免数据库只读和磁盘满的情况出现;另一方面将空间管控和用户、队列解耦,实现了空间管控和权限的分离,降低用户使用空间管控的难度。

    通过创建Schema时指定存储空间的大小实现对存储资源的管理,仅限制永久表存储空间(PREM SPACE)。Schema存储空间管理支持对表数据的存储空间管理,当一个Schema存在空间限制时,在业务执行过程中,如果该Schema下的表数据之和超过空间限制,则会导致业务出错。管理员用户不受schema空间管控。

2、相关GUC参数与视图

Schema空间管控相关参数如下:

  • use_workload_manager

        资源管理总开关,默认为on。

  • enable_perm_space

        空间管控总开关,默认为on。

  • space_readjust_schedule

       空间管控和空间统计功能中,控制是否触发自动校准以及校准空间误差阈值。默认为auto,打开自动校准功能,并且触发自动校准的差误阈值为1GB(该差异指的是在pg_relfilenode_size校准过程中产生的差异)。

Schema空间管控相关视图与函数:

视图/函数 功能说明
pg_namespace PG_NAMESPACE系统表存储命名空间,即存储schema相关的信息。SELECT * FROM pg_namespace WHERE permspace <> - 1;可利用该语句查看当前集群是否使用schema空间管控。
pg_total_schema_info 显示当前节点各个数据库下所有Schema的存储使用情况。其usedspace单位为byte。
pgxc_total_schema_info 显示所有节点各个数据库下所有Schema的存储使用情况,仅支持在CN节点上查询。注意:在该视图中,cn节点上的数据仅表示cn节点的schema数据,而不是各个dn节点的数据之和。
pgxc_total_schema_info_analyze 显示集群整体的Schema空间信息,包括:集群空间总值、各实例空间平均值、倾斜率、单实例空间最大值、单实例空间最小值以及最大最小空间所在的实例名,便于用户获悉集群整体的Schema空间使用情况,仅支持在CN节点上查询。
pgxc_wlm_readjust_relfilenode_size_table()

快速校准函数,通过不同的入参选择对用户、schema、relfilenode三个空间维度进行校准。

  • 入参为0(默认入参为0):不重建PG_RELFILENODE_SIZE系统表,重新校准用户和schema空间。
  • 入参为1:重建PG_RELFILENODE_SIZE系统表,并且重新校准用户和schema空间。
  • 入参为2:重建PG_RELFILENODE_SIZE系统表。
  • 入参为3:重新校准schema空间。
  • 入参为4:重新校准用户空间。

3、Schema空间管控实践

    813集群版本开始,列存表的辅助表空间也将累计到主表所在的Schema空间上,通过消息队列与辅助表反查机制实现,但表空间增长消息会延迟5秒累加到对应Schema空间上。因此在介绍Schema空间管控能力之前,先对辅助表进行介绍:

    行存表:

    列存表:

表类型 含义
reltoastrelid toast辅助表的索引表
reltoastidxid toast辅助表
reldeltarelid 列存delte辅助表
reldeltaidx 列存delte辅助表的索引表
relcudescrelid 列存cudesc辅助表
relcudescidx 列存cudesc辅助表的索引表

schema空间管控效果演示:

# 设置Schema“userg1 ”永久表空间限额为200M。
ALTER SCHEMA userg1 WITH PERM SPACE '200M';
# 修改Schema“userg1 ”永久表空间限额不受限制
ALTER SCHEMA userg1 WITH PERM SPACE 'unlimited';
# 查看Schema“userg1 ”永久表空间限额是否已经设置
SELECT * FROM PG_NAMESPACE WHERE NSPNAME = 'userg1';

schema空间管控常用语句:

# 获取用户在指定节点表空间大小总和
execute direct on("dn_6001_6002") 'select case when sum(pg_table_size(pc.oid)) is null then 0 else sum(pg_table_size(pc.oid)) end from pg_class pc join pg_roles pr on pc.relowner = pr.oid where pr.rolname=''userg1'' and relname not like ''pg_%'';';
# 获取用户在当前节点的表relfilenode 编号
select relfilenode from pg_class where oid in (select oid from pg_class where relowner=(select usesysid from pg_user where usename ='userg1'));

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。