单实例资源组隔离(即将下线)

Hologres支持细粒度资源管理能力,通过为不同的用户账号分配不同的计算资源(即CU,包括CPU和内存),限制用户使用计算资源的上限,实现单实例多负载的隔离,保证了用户之间、应用之间作业的互不影响。本文为您介绍如何使用资源组管理Hologres实例内的计算资源,实现资源隔离。

背景信息

Hologres V1.0及以下版本支持在实例间进行资源隔离,不支持对于实例内部进行更细粒度的用户级别的资源隔离。但是在实际生产环境中,往往需要根据用户在实例内部进行资源隔离,限制每个用户使用的资源上限,以保证用户之间的作业互不影响。为满足上述细粒度的资源隔离诉求,Hologres新增支持使用资源组来助力您管理Hologres实例内的计算资源,实现资源隔离。目前由于技术的局限性,暂时无法做到所有类型的计算负载都可以通过资源组隔离,请谨慎将该技术用在生产环境。完善的资源隔离技术,推荐采用弹性计算组实例。

使用限制

  • 仅Hologres V1.1及以上版本支持使用资源组管理Hologres实例内的计算资源,如果您的实例是V1.1以下版本,请您使用自助升级或加入Hologres钉钉交流群反馈,详情请参见如何获取更多的在线支持?

  • 仅限具备Superuser权限的用户使用资源组管理Hologres实例内计算资源,否则系统会提示权限不足。

  • 计算资源属于实例级别,如果用户有多个数据库,所有数据库共享同一个实例的计算资源,所有数据库共享同一份资源分配方案。

HoloWeb可视化配置资源组

通过HoloWeb可视化配置资源组,相关操作如下。

  • 新建资源组

    1. 进入HoloWeb开发页面,详情请参见连接HoloWeb并执行查询

    2. 在HoloWeb开发页面的顶部菜单栏,单击安全中心

    3. 安全中心页面,单击左侧导航栏的资源组管理

    4. 资源组管理页面,选择目标实例名称,单击新增资源组新增资源组

    5. 新增资源组对话框,输入资源组名称并设置资源组配额,单击确认,即可完成资源组的新建。

      说明

      一个Hologres实例内所有资源组配额总和不能超过1,否则系统会报错。

  • 删除资源组

    1. 进入HoloWeb开发页面,详情请参见连接HoloWeb并执行查询

    2. 在HoloWeb开发页面的顶部菜单栏,单击安全中心

    3. 安全中心页面,单击左侧导航栏的资源组管理

    4. 资源组管理页面,单击对应资源组操作列的删除,进行资源组的删除。

      说明

      如果有用户绑定到资源组,则该资源组不能被删除。

  • 调整资源组配额

    1. 进入HoloWeb开发页面,详情请参见连接HoloWeb并执行查询

    2. 在HoloWeb开发页面的顶部菜单栏,单击安全中心

    3. 安全中心页面,单击左侧导航栏的资源组管理

    4. 资源组管理页面目标资源组的资源组配额列,单击调整配额

    5. 调整配额对话框,调整资源组配额,单击确认调整配额

  • 绑定用户

    创建资源组后,您可以使用HoloWeb可视化绑定用户至资源组。

    1. 进入HoloWeb开发页面,详情请参见连接HoloWeb并执行查询

    2. 在HoloWeb开发页面的顶部菜单栏,单击安全中心

    3. 安全中心页面,单击左侧导航栏的资源组管理

    4. 资源组管理页面,单击对应资源组操作列的绑定用户

    5. 绑定资源组页面,单击新增绑定用户

    6. 绑定用户对话框,选择用户,单击确认

      说明
      • 如果在用户的下拉列表找不到对应的账号,则说明该账号并未添加至当前实例,您需要前往用户管理页面添加用户。

      • 一个用户仅能被绑定一个资源组,若重复绑定用户,以最新绑定的资源组为准。

  • 解绑用户

    1. 进入HoloWeb开发页面,详情请参见连接HoloWeb并执行查询

    2. 在HoloWeb开发页面的顶部菜单栏,单击安全中心

    3. 安全中心页面,单击左侧导航栏的资源组管理

    4. 资源组管理页面,单击对应资源组操作列的绑定用户

    5. 绑定资源组页面,单击对应用户操作列的解绑用户

    6. 解绑用户对话框,单击确认

SQL方式配置资源组

  • 查看资源组配置

    查看所有资源组,每个资源组配置的配额,以及每个资源组绑定的用户的SQL语句如下。

    SELECT  * FROM pg_holo_resource_groups;

    样例结果如下。

     res_group_name | property_key |         property_value
    ----------------+--------------+------------------------------------------
     resource_1     | worker_limit | 0.3
     default        | worker_limit | 0.7
     resource_1     | bind_users   | [ "13xxxxxxxxx13", "p4_29xxxxxxxxxx19" ]                                       
  • 新增资源组

    说明
    • 默认情况下系统会创建一个名为default的资源组,并将所有计算资源都分配到该资源组,且将所有未明确绑定资源的用户都绑定至该资源组。

    • 创建其他资源组后,default资源组的规格等于所有资源组分配之后的剩余部分。

    • 建议default资源组分配资源的百分比至少为0.3。

    创建资源组的SQL语句如下。

    CALL hg_create_resource_group ('resource_group_name', quota);

    参数

    说明

    resource_group_name

    资源组名称。您可以使用英文字符,数字和下划线自定义其名称,最大长度50个字符。

    quota

    资源组分配资源的百分比。取值范围为0.1~0.9,只支持一位小数点。

  • 修改资源组配额

    说明

    一个Hologres实例内所有资源组配额总和不能超过1,否则系统会报错。

    修改资源组配额的SQL语句如下。

    CALL hg_alter_resource_group ('resource_group_name', quota);

    参数

    说明

    resource_group_name

    资源组名称。资源组必须是已经创建的资源组,否则系统会报错。

    quota

    资源组分配资源的百分比。取值范围为0.1~0.9,只支持一位小数点。

  • 删除资源组

    说明

    如果有用户绑定到资源组,则该资源组不能被删除。

    删除资源组的SQL语句如下。

    CALL hg_drop_resource_group ('resource_group_name');

    参数

    说明

    resource_group_name

    资源组名称。资源组必须是已经创建的资源组,否则系统会报错。

  • 将用户绑定至资源组

    说明
    • 一个用户仅能被绑定一个资源组,若重复绑定用户,以最新绑定的资源组为准。

    • 您可以使用如下SQL查看当前的用户。

      SELECT current_user;

    在创建资源组后,您可以将用户绑定至资源组,以限制其使用的计算资源。将用户绑定至资源组的SQL语句如下。

    • 语法示例

      CALL hg_bind_resource_group('resource_group_name', 'user_name');
    • 参数说明

      参数

      说明

      resource_group_name

      资源组名称。资源组必须是已经创建的资源组,否则系统会报错。

      user_name

      用户的名称。必须是存在的用户,且该用户必须拥有访问资源组对应实例的权限,否则系统会报错。

    • 使用示例

      CALL hg_bind_resource_group ('resource_1', 'p4_29xxxxxxxxxxx');
      --注意,阿里云账户需要添加双引号
      CALL hg_bind_resource_group ('resource_1', '"ALIYUN$xxxx@aliyun.com"');
      CALL hg_bind_resource_group ('resource_1', '"RAM$xxx@xxx:xxxx"');
      CALL hg_bind_resource_group ('resource_1', '"13xxxxxxxxxxx13"');
  • 将用户从资源组解绑

    说明

    将用户从资源组解绑后,该用户隶属于default资源组。

    将用户从资源组解绑的SQL语句如下。

    • 语法示例

      CALL hg_unbind_resource_group('resource_group_name', 'user_name');
    • 参数说明

      参数

      说明

      resource_group_name

      资源组名称。资源组必须是已经创建的资源组,否则系统会报错。

      user_name

      用户的名称。必须是存在的用户,且该用户必须拥有访问资源组对应实例的权限,否则系统会报错。

    • 使用示例

      CALL hg_unbind_resource_group ('resource_1', 'p4_29xxxxxxxxxxxxx9');
      -- 注意,阿里云账户需要添加双引号
      CALL hg_unbind_resource_group ('resource_1', '"RAM$xxxx@xxx:xxx"');

常见问题

Q:为什么资源组配额设置为0.5,CPU和内存指标仍然会大于50%?

目前资源组配额限制了大部分查询引擎的CPU和内存,但是有一小部分CPU和内存在资源组之外不受限制(包括但不限于SQL解析、优化、元数据处理、调度、PQE执行、Compaction等)。同时实时写入情况下,CPU受限制,内存不受限制。所以会出现资源组总CPU和内存指标高于资源组所设置配额的情况。