资源管理之用户空间管控

举报
直线歪了 发表于 2025/05/27 19:12:33 2025/05/27
【摘要】 1、用户空间管控简介    在语句运行过程中,需要使用到资源有计算资源cpu和网络,存储资源磁盘空间,网络资源等,在集群中同时有多个用户同时运行作业,如果其中有个用户的作业将使用大量的cpu和内存资源,那么这部分语句运行起来后,其他作业将不能再运行,甚至导致集群不可用。因此资源管理引入了用户空间管控,GaussDB(DWS)通过在创建用户时指定存储空间的大小实现对存储资源的管理,包括指定:永...

1、用户空间管控简介

    在语句运行过程中,需要使用到资源有计算资源cpu和网络,存储资源磁盘空间,网络资源等,在集群中同时有多个用户同时运行作业,如果其中有个用户的作业将使用大量的cpu和内存资源,那么这部分语句运行起来后,其他作业将不能再运行,甚至导致集群不可用。因此资源管理引入了用户空间管控,GaussDB(DWS)通过在创建用户时指定存储空间的大小实现对存储资源的管理,包括指定:永久表存储空间(PREM SPACE)、临时表存储空间(TEMP SPACE)及算子落盘空间(SPILL SPACE)。

    存储空间管理支持对组用户和业务用户的存储空间管理,当业务用户对应的组用户存在空间限制时,则业务用户的空间也受到该组用户的空间限制。用户空间管控的优势为:①可以实现三种空间类型的管控,分别对应不同的业务场景;②可以对每个用户进行细粒度的精准控住,限制每个独立用户空间使用;也可以对一类用户的空间进行整体控制。

2、用户空间管控模型

    GaussDB for DWS 用两层用户架构组织租户。一个父租户下有多个子租户,一个子租户只能属于一个父租户我们通过给父租户分配资源配额,同时限定附属于该父租户的子租户的资源使用。其中,子租户也可以分配父租户分配到的资源。 主要涉及的资源有以下几种:1)计算资源:CPU资源、内存资源。2)存储资源:磁盘空间。

用户的双层模型与资源池的双层模型的对应关系:

用户分类 特点 关联关系 资源池分类 特点
组用户 代表一类用户,不直接运行业务 1:1 组资源池
  • 只能关联一个组用户
  • 不直接用户业务运行
业务用户 对应一个用户,直接运行业务 N:1 业务资源池
  • 有组资源池
  • 业务资源池运行关联多个用户,用于业务执行

    组资源池支持划分成多个业务资源池,提供了更为灵活的资源隔离策略,支持细粒度的资源划分方案。实际应用过程中,为了便于理解,将模型进行了简化:默认情况下组资源池与业务资源池是一对一的关系,且只对用户展示业务资源池。综上,DWS支持双层用户模型,可选择性的控制单一用户或一类用户的空间使用,客户可以总和业务场景选择行使用双层用户模型,功能示例:

# 创建class与workload控制组
gs_ssh -c "gs_cgroup -c -S classg -N v3_logic_write"
gs_ssh -c "gs_cgroup -c -S classg -G wg1 -N v3_logic_write"

# 创建组资源池和业务资源池
create resource pool poolg with (control_group='classg',nodegroup='v3_logic_write',mem_percent=50);
create resource pool poolg1 with (control_group='classg:wg1',nodegroup='v3_logic_write',mem_percent=50);

# 创建组用户和业务用户
create user userg with resource pool 'poolg' password 'Gauss_234'  node group v3_logic_write;
create user userg1 with resource pool 'poolg1' password 'Gauss_234' user group 'userg'  node group v3_logic_write;

    通常来说,对于单个部门的用户而言,自己的数据需要自己创建记录。此时,将用户关联到业务资源池后,进行创建表的操作即可,此时用户拥有自己创建表的增删改全部操作权限。然而,当用户需要访问其他部门的作业时,我们需要其他部门的管理员对该用户进行赋权操作。

    当我们需要普通用户访问某个表时,可使用grant语法对用户赋权限或者收回权限,该操作需要拥有sysadmin权限的用户进行,举个例子,user_1是A部门员工,lineitem是B部门建的表,此时user_1需要跨部门访问lineitem表。此时可使用下面语句对user_1进行赋权操作。

# 将public表空间下的lineitem表的查询权限赋给user_1:
grant select on public.lineitem to user_1;
# 回收user_1的public表空间下的lineitem表的查询权限:
Revoke select on public.lineitem from user_1;

    注意:用户资源监控是基于用户操作来的,但是由于用户可访问非自己创建的表,所以,用户资源监控在数据统计时,表空间的增加会累计到表的创建者上,而用户对表操作时的语句执行信息,比如算子下盘量,临时空间占用等信息会累计到表的操作者身上。

    查询用户信息常用视图:

select * from pg_user;     # PG_USER视图提供了访问数据库用户的信息
select * from pg_authid;   # PG_AUTHID系统表存储有关数据库认证标识符(角色)的信息。角色把“用户”的概念包含在内。
select * from pg_roles;    # PG_ROLES视图提供访问数据库角色的相关信息

3、相关guc参数与视图

    用户空间管控的相关GUC参数如下所示:

  • use_workload_manager

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

  • enable_perm_space

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

  • space_manage_level

        控制用户空间管控等级,node表示关闭用户空间管控功能,instance表示用户空间管控设置到单实例级别(即单实例上的用户空间使用超过单实例上限时会报错),cluster表示用户空间管控设置到集群级别(即所有实例上的用户空间使用超过上限时会报错),该参数默认为instance。修改该参数需要在cn和dn上同时应用,且需要重启集群并重新设置用户空间上限。

  • space_readjust_schedule

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

  • enable_logical_io_statistics

    用户资源监控和资源池资源监控IO相关数值的开关,默认为on,开启后用户监控中io相关记录(read_kbytes、write_kbytes、read_counts、write_counts、read_speed和write_speed)会进行统计。

  • enable_user_metric_persistent

    否开启用户/资源池历史资源监控转存功能,开启后会将监控记录转存到历史表pg_catalog.gs_wlm_user_resource_history / pg_catalog.gs_respool_resource_history中,每30s转储一次当前的资源信息数据,每个节点各自存储自己的数据。

  • user_metric_retention_time

    设置用户历史资源监控数据的保存天数,默认为7天。历史数据每5min后台自动清理一次。

如果用户无需关注用户和资源池历史资源监控信息,可关闭参数:
gs_guc reload -Z coordinator -Z datanode -N all -I all -c "enable_user_metric_persistent=off"
gs_guc reload -Z coordinator -Z datanode -N all -I all -c "user_metric_retention_time=0"

    用户空间管控的相关视图如下所示:

        用户监控支持对CPU、内存、存储空间、临时空间、算子落盘空间、磁盘IO、网络等方面的监控,通过对这些资源的监控,管理员可以了解系统的负载情况、进程的运行状态、磁盘空间的使用情况、网络带宽的利用率等信息。这些信息可以帮助管理员及时发现系统的异常情况,及时采取措施,避免系统崩溃或者服务中断。

视图名

功能说明

PG_TOTAL_USER_RESOURCE_INFO

所有用户的资源限额和资源实时在当前节点的使用情况。不监控超户数据。cn节点数据是各dn节点数据之和(对于total_space,total_temp_space,total_spill_size字段在cn节点显示的数据,如果是cluster级别,那就是用户设置的数据,如果是instance级别,就是用户设置的数据*所属集群的dn个数,在dn节点,无论是cluster还是instance,显示的都是用户设置的数据;对于used_space,used_temp_space,used_spill_size在cn和dn节点显示的数据都是父用户的数据包含子用户的数据。在cn显示的是总和,在dn节点显示的是各自的数据)。

PGXC_TOTAL_USER_RESOURCE_INFO

所有用户的资源限额和资源实时在所有节点的使用情况。不监控超户数据。cn节点数据是各dn节点数据之和(对于total_space,total_temp_space,total_spill_size字段在cn节点显示的数据,如果是cluster级别,那就是用户设置的数据,如果是instance级别,就是用户设置的数据*所属集群的dn个数,在dn节点,无论是cluster还是instance,显示的都是用户设置的数据;对于used_space,used_temp_space,used_spill_size在cn和dn节点显示的数据都是父用户的数据包含子用户的数据。在cn显示的是总和,在dn节点显示的是各自的数据)。

GS_WLM_USER_RESOURCE_INFO('username')

查询具体某个用户的资源限额和资源实时使用情况

GS_WLM_USER_RESOURCE_HISTORY

查询所有用户的资源限额和资源历史使用情况

PGXC_WLM_USER_RESOURCE_HISTORY

查询所有用户在所有节点的资源限额和资源历史使用情况

GS_USER_MONITOR

该视图展示用户资源使用信息的同时,可以同步展示用户作业排队运行信息以及用户所属资源池和逻辑集群信息,可以一目了然的显示用户负载和资源使用情况,可以通过该视图迅速定位到是哪个用户负载/资源高导致的问题。


4、用户空间效果演示

    首先对三类空间类型进行介绍:①永久表:该表在pg_class中的relpersistence字段为p。②临时表:改表在pg_class中的relpersistence字段为t。③临时文件:语句执行过程中的结果集下盘文件。

# 修改用户“userg1”永久表空间限额为10M
ALTER USER userg1  PERM SPACE '10M';
# 修改用户“userg1”临时表空间限额为10M
ALTER USER userg1  TEMP SPACE '10M';
# 修改用户“userg1”算子落盘空间限额为10M
ALTER USER userg1  SPILL SPACE '10M';

 注意在管控面设置的用户空间属于总空间,单dn的空间管控需要除以dnNum

截图4.PNG

 永久表空间超限:

  临时表空间超限:

  算子下盘空间超限:

其他用户空间管控常用语句:

业务用户空间查询:
select username,used_space,total_space,used_temp_space,used_spill_space,total_spill_space from pg_total_user_resource_info;
组用户空间查询:
select rolname,used_space,total_space,used_temp_space,total_temp_space,used_spill_space,total_spill_space from pg_total_user_resource_info_oid left join pg_authid on userid=pg_authid.oid where rolrespool='poolg';
用户空间校准:
select pgxc_wlm_readjust_relfilenode_size_table(4);

5、参考文献

GaussDB(DWS) 监控工具指南【汇总版】-云社区-华为云 (huaweicloud.com)

GaussDB(DWS)的用户监控视图-云社区-华为云 (huaweicloud.com)

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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