Hologres支持细粒度资源管理能力,通过为不同的用户账号分配不同的计算资源(即CU,包括CPU和内存),限制用户使用计算资源的上限,实现单实例多负载的隔离,保证了用户之间、应用之间作业的互不影响。本文为您介绍如何使用资源组管理Hologres实例内的计算资源,实现资源隔离。
背景信息
Hologres V1.0及以下版本支持在实例间进行资源隔离,不支持对于实例内部进行更细粒度的用户级别的资源隔离。但是在实际生产环境中,往往需要根据用户在实例内部进行资源隔离,限制每个用户使用的资源上限,以保证用户之间的作业互不影响。为满足上述细粒度的资源隔离诉求,Hologres新增支持使用资源组来助力您管理Hologres实例内的计算资源,实现资源隔离。目前由于技术的局限性,暂时无法做到所有类型的计算负载都可以通过资源组隔离,请谨慎将该技术用在生产环境。完善的资源隔离技术,推荐采用弹性计算组实例。
使用限制
仅Hologres V1.1及以上版本支持使用资源组管理Hologres实例内的计算资源,如果您的实例是V1.1以下版本,请您使用自助升级或加入Hologres钉钉交流群反馈,详情请参见如何获取更多的在线支持?。
仅限具备Superuser权限的用户使用资源组管理Hologres实例内计算资源,否则系统会提示权限不足。
计算资源属于实例级别,如果用户有多个数据库,所有数据库共享同一个实例的计算资源,所有数据库共享同一份资源分配方案。
HoloWeb可视化配置资源组
通过HoloWeb可视化配置资源组,相关操作如下。
新建资源组
进入HoloWeb开发页面,详情请参见连接HoloWeb并执行查询。
在HoloWeb开发页面的顶部菜单栏,单击安全中心。
在安全中心页面,单击左侧导航栏的资源组管理。
在资源组管理页面,选择目标实例名称,单击新增资源组。
在新增资源组对话框,输入资源组名称并设置资源组配额,单击确认,即可完成资源组的新建。
说明一个Hologres实例内所有资源组配额总和不能超过1,否则系统会报错。
删除资源组
进入HoloWeb开发页面,详情请参见连接HoloWeb并执行查询。
在HoloWeb开发页面的顶部菜单栏,单击安全中心。
在安全中心页面,单击左侧导航栏的资源组管理。
在资源组管理页面,单击对应资源组操作列的删除,进行资源组的删除。
说明如果有用户绑定到资源组,则该资源组不能被删除。
调整资源组配额
进入HoloWeb开发页面,详情请参见连接HoloWeb并执行查询。
在HoloWeb开发页面的顶部菜单栏,单击安全中心。
在安全中心页面,单击左侧导航栏的资源组管理。
在资源组管理页面目标资源组的资源组配额列,单击调整配额。
在调整配额对话框,调整资源组配额,单击确认。
绑定用户
创建资源组后,您可以使用HoloWeb可视化绑定用户至资源组。
进入HoloWeb开发页面,详情请参见连接HoloWeb并执行查询。
在HoloWeb开发页面的顶部菜单栏,单击安全中心。
在安全中心页面,单击左侧导航栏的资源组管理。
在资源组管理页面,单击对应资源组操作列的绑定用户。
在绑定资源组页面,单击新增绑定用户。
在绑定用户对话框,选择用户,单击确认。
说明如果在用户的下拉列表找不到对应的账号,则说明该账号并未添加至当前实例,您需要前往用户管理页面添加用户。
一个用户仅能被绑定一个资源组,若重复绑定用户,以最新绑定的资源组为准。
解绑用户
进入HoloWeb开发页面,详情请参见连接HoloWeb并执行查询。
在HoloWeb开发页面的顶部菜单栏,单击安全中心。
在安全中心页面,单击左侧导航栏的资源组管理。
在资源组管理页面,单击对应资源组操作列的绑定用户。
在绑定资源组页面,单击对应用户操作列的解绑用户。
在解绑用户对话框,单击确认。
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和内存指标高于资源组所设置配额的情况。