本文为您介绍查看、创建、删除以及扩缩容计算组等管理命令。
注意事项
开启计算组模式需要后台配置,且仅Hologres V2.0.4及以上版本支持开启并使用计算组模式,请您加入实时数仓Hologres交流群申请,详情请参见如何获取更多的在线支持?。
新购买一个计算组实例时,系统默认会有一个名称为
init_warehouse
的默认计算组。一个实例只有一个默认计算组,且默认计算组无法删除,但是可以修改。使用计算组A新建Table Group时,Table Group的主计算组默认为计算组A。
每个实例最多可以创建10个计算组,每个计算组资源最小32 CU,最大512 CU。自V3.0.10版本起,计算组的最大规格调整至1024 CU。
不支持使用SQL命令停止或恢复实例的默认计算组。
默认情况下,所有用户都有使用默认计算组的权限。
所有计算组都可以执行DDL。
计算组型实例不支持配置资源组(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版本起,计算组扩容期间,计算组的查询和写入不会中断。
操作步骤
扩容计算组资源,操作语法如下:
CALL hg_alter_warehouse ('<warehouse_name>',<cu>);
参数说明:
参数
类型
说明
warehouse_name
TEXT
需要调整的计算组名称。
cu
INTEGER
计算组的CU数。
最大值:512。
最小值:32。
步长:16。
查询计算组的状态。
由于调整计算组计算资源的过程是异步的,执行SQL后,并不代表计算组计算资源调整完成,需要您使用
hg_get_warehouse_status
函数查询计算组的状态。select hg_get_warehouse_status('<warehouse_name>');
返回结果为Running,即计算组在Running状态下,继续下面步骤。
Shard重分布。
使用如下命令让Shard重新分布到增加扩容的计算组上。
SELECT hg_rebalance_warehouse ('<warehouse_name>');
查询计算组的状态。
由于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。
缩容后,计算资源会归属到实例未分配资源中,您可以继续使用该资源新建计算组或扩容其他计算组,也可以缩容实例以释放该资源。
操作步骤
缩容计算组资源,操作语法如下:
CALL hg_alter_warehouse ('<warehouse_name>',<cu>);
参数说明:
参数
类型
说明
warehouse_name
TEXT
需要调整的计算组名称。
cu
INTEGER
计算组的CU数。
最大值:512。
最小值:32。
步长:16。
查询计算组的状态。
由于调整计算组计算资源的过程是异步的,执行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"}}}');