计算组管理

本文为您介绍查看、创建、删除以及扩缩容计算组等管理命令。

注意事项

  • 开启计算组模式需要后台配置,且仅Hologres V2.0.4及以上版本支持开启并使用计算组模式,请您加入实时数仓Hologres交流群申请,详情请参见如何获取更多的在线支持?

  • 新购买一个计算组实例时,系统默认会有一个名称为init_warehouse的默认计算组。一个实例只有一个默认计算组,且默认计算组无法删除,但是可以修改。

  • 使用计算组A新建Table Group时,Table Group的主计算组默认为计算组A。

  • 每个实例最多可以创建10个计算组,每个计算组资源最小32CU,最大512CU。

  • 不支持使用SQL命令停止或恢复实例的默认计算组。

  • 默认情况下,所有用户都有使用默认计算组的权限。

  • 所有计算组都可以执行DDL。

  • 计算组型实例不支持配置资源组(Beta),资源组详情请参见资源组管理(Beta)。推荐通过划分多个计算组以实现资源隔离。

  • 计算组实例计费相关请参见计费概述

查看计算组

  • 命令格式

    • 系统表hologres.hg_warehouses存放了当前实例所有计算组的信息,您可以使用如下SQL查看当前实例下所有的计算组的信息。

      SELECT * FROM hologres.hg_warehouses;
    • 使用如下SQL查看当前使用的计算组,系统将会返回当前使用的计算组名称。

      SELECT current_warehouse();
  • 参数说明

    系统表hologres.hg_warehouses中包含的字段信息如下:

    字段

    字段类型

    说明

    示例值

    warehouse_id

    INTEGER

    计算组ID,是计算组的唯一ID。

    1

    warehouse_name

    TEXT

    计算组名称。

    init_warehouse

    cpu

    INTEGER

    计算组的CPU(单位Core)。

    32

    mem

    INTEGER

    计算组的内存(单位GB)。

    128

    cluster_min_count

    INTEGER

    计算组的最小分片数量。

    1

    cluster_max_count

    INTEGER

    计算组的最大分片数量。

    1

    target_status

    INTEGER

    计算组的目标状态,由于变更计算组状态是异步的,例如执行创建计算组的SQL,系统会立即返回SQL执行结果,但返回SQL结果时,并非计算组已经创建成功,系统会在后台异步创建计算组,这里的状态记录了计算组最终需要达到的状态,有如下状态:

    • 1:运行中。

    • 2:手动停机。

    1

    status

    INTEGER

    计算组当前状态,有如下状态:

    • 0:初始化。

    • 1:运行中。

    • 2:手动停机。

    • 3:处理失败,如果状态为处理失败,status_detail字段会显示具体的原因。

    • 4:处理中。

    1

    status_detail

    TEXT

    计算组状态详情。

    is_default

    BOOLEAN

    是否是默认计算组,有如下取值:

    • t:是默认计算组。

    • f:不是默认计算组。

    t

    config

    TEXT

    计算组配置。

    comment

    TEXT

    计算组备注。

创建计算组

  • 注意事项

    • 仅支持使用阿里云账号或者RAM用户创建资源组。

    • 创建计算组需要具备实例的Superuser权限。

    • 由于创建计算组的过程是异步的,执行创建计算组组SQL后,并不代表计算组创建完成,需要您使用hg_get_warehouse_status函数查询计算组的状态。

  • 命令格式

    CALL hg_create_warehouse ('<warehouse_name>', <cu>);
  • 参数说明

    参数

    类型

    说明

    warehouse_name

    TEXT

    新建的计算组名称,命名要求:

    • 仅支持数字、英文字母和下划线的组合。

    • 最长支持64个字符。

    cu

    INTEGER

    计算组的CU数。

    • 最大值:512。

    • 最小值:32。

    • 步长:16。

停止计算组

  • 注意事项

    • 停止计算组需要具备实例的Superuser权限。

    • 不支持使用SQL命令停止或恢复实例的默认计算组,如需停止或恢复实例的默认计算组,请直接停机或恢复实例,详情请参见实例列表

    • 若计算组对应的Table Group有从计算组,那么该计算组无法被停止。例如计算组A是Table Group A的主计算组,负责向Table Group A中的表写入数据,计算组B是Table Group A的从计算组。此时暂时不支持停止计算组A。

    • 由于停止计算组的过程是异步的,执行SQL后,并不代表计算组停止完成,需要您使用hg_get_warehouse_status函数查询计算组的状态。

  • 命令格式

    CALL hg_suspend_warehouse ('<warehouse_name>');
  • 参数说明

    参数

    类型

    说明

    warehouse_name

    TEXT

    需要停止的计算组名称。

恢复计算组

  • 注意事项

    • 恢复计算组需要具备实例的Superuser权限。

    • 不支持使用SQL命令停止或恢复实例的默认计算组,如需停止或恢复实例的默认计算组,请直接停机或恢复实例,详情请参见实例列表

    • 由于恢复计算组的过程是异步的,执行SQL后,并不代表计算组停止完成,需要您使用hg_get_warehouse_status函数查询计算组的状态。

  • 命令格式

    CALL hg_resume_warehouse ('<warehouse_name>');
  • 参数说明

    参数

    类型

    说明

    warehouse_name

    TEXT

    需要恢复的计算组名称。

删除计算组

  • 注意事项

    • 仅支持使用阿里云账号或者RAM用户删除计算组。

    • 删除计算组需要具备实例的Superuser权限。

    • 实例的默认计算组不支持使用SQL命令删除。

    • Table Group的主计算组不支持使用SQL命令删除。

    • 由于删除计算组的过程是异步的,执行SQL后,并不代表计算组删除完成,需要您使用hg_get_warehouse_status函数查询计算组的状态。

  • 命令格式

    CALL hg_drop_warehouse ('<warehouse_name>');
  • 参数说明

    参数

    类型

    说明

    warehouse_name

    TEXT

    需要删除的计算组名称。

扩容计算组计算资源

权限说明

  • 仅支持使用阿里云账号或者RAM用户扩容计算组,不支持STS账号。

  • 扩容计算组计算资源需要具备以下权限:

    • RAM角色权限:AliyunHologresWarehouseFullAccess或AliyunHologresFullAccess权限。

    • 实例内部的Superuser权限。

使用说明

  • 扩容计算组前,需要先在管控台上扩容实例的资源,确保实例有足够的未分配资源。当实例资源调整完毕后,系统会拉起新的Pod,但是此时Pod上并未加载任何Shard的元数据,所以扩容出来的Pod不会参与计算,实例扩容的操作不会影响计算组的查询和写入。

  • 实例扩容完成,且有足够的未分配资源后,可以继续使用该部分未分配资源,扩容计算组资源。如果实例未分配资源不足,则无法完成计算组扩容。

    • 自Hologres V2.2版本起,如果计算组有空Pod,系统会自动执行Rebalance操作,使新的Pod加载Shard的元数据。在Rebalance完成后,才能使用新扩容的资源,Rebalance时查询和写入会中断15秒。因此,如果您的实例为V2.2及以上版本,扩容计算组后,无需手动执行Rebalance操作。如果您的实例版本低于V2.2,则需手动执行Rebalance操作。

    • Hologres V3.0版本起,计算组扩容期间,计算组的查询和写入不会中断。

操作步骤

  1. 扩容计算组资源,操作语法如下:

    CALL hg_alter_warehouse ('<warehouse_name>',<cu>);

    参数说明:

    参数

    类型

    说明

    warehouse_name

    TEXT

    需要调整的计算组名称。

    cu

    INTEGER

    计算组的CU数。

    • 最大值:512。

    • 最小值:32。

    • 步长:16。

  2. 查询计算组的状态。

    由于调整计算组计算资源的过程是异步的,执行SQL后,并不代表计算组计算资源调整完成,需要您使用hg_get_warehouse_status函数查询计算组的状态。

    select hg_get_warehouse_status('<warehouse_name>');

    返回结果为Running,即计算组在Running状态下,继续下面步骤。

  3. Shard重分布。

    使用如下命令让Shard重新分布到增加扩容的计算组上。

    SELECT hg_rebalance_warehouse ('<warehouse_name>');
  4. 查询计算组的状态。

    由于rebalance的过程是异步的,执行SQL后,并不代表rebalance调整完成,需要您使用如下命令查询计算组的状态。

    • hg_get_rebalance_warehouse_status函数返回当前计算组的状态:

      SELECT hg_get_rebalance_warehouse_status ('<warehouse_name>');

      返回t即表示成功。

    • hg_wait_until_rebalance_warehouse_done函数可以直到指定计算组处于Running状态时,再返回结果:

      select hg_wait_until_rebalance_warehouse_done('<warehouse_name>',<timeout_seconds>);

      其中timeout_seconds:非必填。代表返回超时时间,单位为秒,类型为INTEGER。

      返回DONE即表示成功。

使用示例

推荐使用如下SQL为read_warehouse_1计算组扩容至64CU:

-- 增加计算组的资源
CALL hg_alter_warehouse ('read_warehouse_1',64);

-- 等待计算组扩容完毕
SELECT wait_until_warehouse_running ('read_warehouse_1');

-- rebalance
SELECT hg_rebalance_warehouse ('read_warehouse_1');

-- 等待rebalance完毕
SELECT hg_wait_until_rebalance_warehouse_done ('read_warehouse_1');

缩容计算组计算资源

权限说明

  • 仅支持使用阿里云账号或者RAM用户缩容计算组,不支持STS账号。

  • 缩容计算组计算资源需要具备以下权限:

    • RAM角色权限:AliyunHologresWarehouseFullAccess或AliyunHologresFullAccess权限

    • 实例内部的Superuser权限。

使用说明

  • 缩容时Hologres系统会先做Shard的Rebalance,将准备下线的Pod上的Shard迁移到其他Pod上。Rebalance中查询和写入会中断15秒。Rebalance完成后,直接下线多余的Pods。

  • 缩容后,计算资源会归属到实例未分配资源中,您可以继续使用该资源新建计算组或扩容其他计算组,也可以缩容实例以释放该资源。

操作步骤

  1. 缩容计算组资源,操作语法如下:

    CALL hg_alter_warehouse ('<warehouse_name>',<cu>);

    参数说明:

    参数

    类型

    说明

    warehouse_name

    TEXT

    需要调整的计算组名称。

    cu

    INTEGER

    计算组的CU数。

    • 最大值:512。

    • 最小值:32。

    • 步长:16。

  2. 查询计算组的状态。

    由于调整计算组计算资源的过程是异步的,执行SQL后,并不代表计算组计算资源调整完成,需要您使用hg_get_warehouse_status函数查询计算组的状态。

    select hg_get_warehouse_status('<warehouse_name>');

    返回结果为running,即计算组状态为running状态。

获取计算组状态

  • 命令格式

    • 使用如下SQL获取计算组的当前状态:

      select hg_get_warehouse_status('<warehouse_name>');
    • 由于Warehouse 的创建、扩缩容等都是异步执行的,有时候需要变更计算组状态后再进行一些操作。此时可以使用wait_until_warehouse_running函数,该函数可以直到指定计算组处于Running状态时,再返回结果,命令如下:

      select wait_until_warehouse_running('<warehouse_name>',<timeout_seconds>);
  • 参数说明

    参数

    类型

    说明

    warehouse_name

    TEXT

    需要获取状态的计算组名称。

    timeout_seconds

    INTEGER

    返回超时时间,单位秒。非必填。

  • 使用示例

    使用如下SQL实现每次从表org_data向表res_data导入数据时,先扩容计算组,再导入数据,然后缩容计算组:

    -- warehouse_1扩容至64CU
    CALL hg_alter_warehouse ('warehouse_1',64);
    
    -- 等待warehouse_1扩容完成
    SELECT wait_until_warehouse_running('warehouse_1');
    
    -- 写入数据
    INSERT INTO res_data SELECT * FROM org_data;
    
    -- warehouse_1缩回32CU
    CALL hg_alter_warehouse ('warehouse_1',32);

修改计算组名称

  • 权限说明

    修改计算组名称需要具备实例的Superuser权限。

  • 命令格式

    CALL hg_rename_warehouse('<org_warehouse_name>','<new_warehouse_name>');
  • 参数说明

    参数

    类型

    说明

    org_warehouse_name

    TEXT

    需要修改的计算组名称。

    new_warehouse_name

    TEXT

    计算组的新名称。

重启计算组

  • 权限说明

    重启计算组需要具备实例的Superuser权限。

  • 注意事项

    由于重启计算组的过程是异步的,执行SQL后,并不代表计算组重启完成,需要您使用hg_get_warehouse_status函数查询计算组的状态。

  • 命令格式

    CALL hg_restart_warehouse('<warehouse_name>');
  • 参数说明

    参数

    类型

    说明

    warehouse_name

    TEXT

    需要重启的计算组名称。

高级操作

计算组均衡分片(Rebalance)

Hologres实例在运行时,每个计算组的Worker节点会均匀地加载数据分片(Shard)的元数据。但是在某些场景下(例如触发了快速恢复、扩容等),数据分片在Worker节点上分布不均,此时就需要触发均衡分片操作,使系统主动的重新分配数据分片,最终让计算组的Worker节点均匀加载Shard的元数据。

  • 权限说明

    触发均衡分片操作需要具备实例的Superuser权限。

  • 注意事项

    • Hologres从 V2.1版本开始,如果计算组内发现有空的Worker节点(未加载任何Shard),计算组会自动触发Rebalance。

    • Hologres从 V2.2版本开始,系统支持对计算组Rebalance期间执行的查询(SELECT)自动重试,使得查询能在适当延长执行时间后顺利完成,不会出现如ERROR: fail to execute query internal error: Get rundown is not allowed in recovering state.异常报错。

  • 命令格式

    SELECT hg_rebalance_warehouse ('<warehouse_name>');
  • 参数说明

    参数

    类型

    说明

    warehouse_name

    TEXT

    需要触发均衡分片的计算组名称。

  • 返回结果

    触发均衡分片操作后,有如下返回结果:

    • true:表示Rebalance触发成功,系统开始进行Rebalance操作。

    • false:表示无需Rebalance。

    • 报错:表示Rebalance触发失败。例如存在Pod故障时,触发Rebalance操作会报错。

    说明
    • 执行Rebalance过程中,系统会计算是否需要Rebalance,最终达到均衡状态,即每个Worker加载的Shard数量差异小于等于1。例如:

      • 如果有2个Worker,2个Shard,那么最终每个Worker都会分到1个Shard。

      • 如果有2个Worker,3个Shard,那么最终其中1个Worker会分到1个Shard,另一个Worker会分到2个Shard。

    • Rebalance操作通常需要2~3分钟,执行时长和计算组中Table Group的数量有关,Table Group越多,Rebalance耗时越长。Rebalance过程中您的写入大约会中断15秒。

    • 由于Rebalance是异步执行,您可以使用如下SQL查看执行进度:

      SELECT hg_get_rebalance_warehouse_status('<warehouse_name>');

      返回结果为DOING表示正在执行Rebalance操作;返回结果为DONE表示Rebalance操作已完成。

设置计算组的超时时长

您可以通过设置statement_timeout参数,实现Session级别或数据库级别的超时时长设置,详情请参见GUC参数

针对计算组,可以执行如下命令,为计算组设置超时时长。该配置优先级低于上述Session级别和数据库级别配置,因此需要先取消数据库级别的配置。

-- 取消数据库级别设置
ALTER DATABASE <db_name> RESET statement_timeout;

-- 设置计算组的超时时长为600s
CALL hg_alter_warehouse ('<warehouse_name>', <cu>, '{"configs":{"gucs":{"statement_timeout":"600000"}}}');