文档首页 > > 开发指南> 资源负载管理> 资源负载管理基础框架> 资源池

资源池

分享
更新时间: 2019/07/22 15:44

背景信息

DWS资源负载管理的核心是资源池,资源池提供多种属性可以控制内存、IO和CPU资源的控制,基于优先级调度机制实现资源管理和分配,对用户业务提供资源负载管理服务。

基于资源池的资源负载管理的范围包括:并发管理、优先级调度。

资源池概述(Resource Pools)

资源池是一种配置机制,用于对主机资源进行划分。资源池指定资源和并发队列属性,业务作业通过绑定资源池,来设置业务作业的优先级及能够利用到的资源。

数据库管理员需要根据不同的业务类型,将资源池绑定至对应的控制组。

基于资源池的负载管理

资源负载管理的工作原理如图1所示。

图1 负载管理示意图

资源池通过绑定控制组进行实现资源的分配,作业的优先级和其关联的资源池的资源数量有关。一般情况下,我们认为作业关联到的资源池拥有的资源数量越多,则其优先级越高,因为该作业能够拥有更多的资源去执行。

在示例中:

  • 作业A的优先级高于作业C和D,因为作业A关联的资源池拥有的资源最多。
  • 作业A和作业B在同一资源池中,两者优先级相同,发生资源竞争时,平分资源池1的系统资源。

如果要调整作业的优先级,只要切换其绑定的资源池就可以了。

任务流程

资源负载管理的操作流程请参见图2表1

图2 负载管理流程图
表1 负载管理任务说明

任务项

说明

资源池

可以使用DWS提供的对应DDL语句来创建资源池,也可以通过相应的DDL语句对其进行的修改和删除操作。

关联作业

执行作业前,将用户关联到某一个资源池,即可将作业关联到指定的资源。

执行作业

-

default_pool

在开启了资源负载管理功能之后,default_pool是由系统自动创建的,当一个会话或者用户没有指定关联的资源池时,都会被默认关联到default_pool。default_pool默认绑定DefaultClass:Medium控制组,并且不限制所关联的业务的并发数。

default_pool的详细属性参见表2

表2 default_pool属性

属性

属性值

说明

respool_name

default_pool

资源池名称。

mem_percent

100

最大占用内存百分比。

cpu_affinity

-1

CPU亲和性,保留参数。

control_group

DefaultClass:Medium

资源池关联的控制组。

active_statements

-1

资源池允许的最大并发数。-1为不限制并发数量。

max_dop

1

开启SMP后,算子执行的并发度,保留参数。

memory_limit

8GB

内存使用上限,保留参数。

parentid

0

父资源池OID。

io_limits

0

每秒触发IO的次数上限。行存单位是万次/s,列存是次/s。0表示不控制。

io_priority

None

IO利用率高达90%时,重消耗IO作业进行IO资源管控时关联的优先级等级,包括三档可选:Low、Medium和High,分别对应限制iops为该作业原始触发数值的25%、50%及80%。None表示不控制。

  • DWS不允许对default_pool参数进行修改。
  • default_pool资源池关联的业务并发量会受到全局并发参数max_active_statements的影响。max_active_statements是指允许在某一CN上执行的最大查询

操作过程

创建资源池

开启资源负载管理之后,仅使用默认资源池并不能满足业务对资源负载管理的诉求,必须根据需要创建新的资源池,对系统资源进行重分配,来满足实际业务对系统资源精细管理的需要。

使用dbadmin或具有DBA权限的用户连接数据库后,就可以使用相关SQL语句创建和管理资源池。详细语法信息请参考CREATE RESOURCE POOLALTER RESOURCE POOLDROP RESOURCE POOL

  • 创建一个关联默认控制组的资源池。如果在创建资源池的时候不指定所关联的控制组,则该资源池会被关联到默认控制组(DefaultClass控制组下的"Medium" Timeshare控制组)。
    CREATE RESOURCE POOL respool1;

    当结果显示为如下信息,则表示创建成功。

    CREATE RESOURCE POOL
  • 创建一个关联到"Rush" Timeshare控制组的资源池。
    CREATE RESOURCE POOL respool2 WITH (control_group='Rush');

    当结果显示为如下信息,则表示创建成功。

    CREATE RESOURCE POOL
    说明:
    • control_group取值区分大小写,指定时要使用单引号''。
    • 只可以指定Timeshare控制组代表的字符串,即"Rush"、"High"、"Medium"或"Low"其中一种,如control_group的字符串为"High";代表资源池指定到DefaultClass控制组下的"High" Timeshare控制组。
  • 创建一个具有并发限制的资源池。在创建资源池的时候可以通过制定ACTIVE_STATEMENTS限制关联在其上的并发任务数,当并发数量超过所设定的ACTIVE_STATEMENTS上限时,会启用排队机制,从而实现任务并发数控制。
    CREATE RESOURCE POOL respool3 WITH (active_statements=5);

    当结果显示为如下信息,则表示创建成功。

    CREATE RESOURCE POOL
    说明:
    1. active_statements字段的默认值为 10,代表该资源池上的语句最多可以有10个并发。
    2. 其取值范围为 -1 ~ INT_MAX, 当为-1时,代表不受限制。
  • 创建一个具有内存限制的资源池。在创建资源池时,可以通过MEM_PERCENT参数来限制该资源池可以使用的最大内存。MEM_PERCENT的取值范围为0-100的整数。
    CREATE RESOURCE POOL respool4 WITH (MEM_PERCENT=20);

    当结果显示为如下信息,则表示创建成功。

    CREATE RESOURCE POOL
    说明:

    设置资源池使用的内存大小为可用内存大小的20%。

管理资源池

在完成创建资源池后,管理员经常会根据需要对资源池进行调整配置以及删除已经废弃的资源池。

管理资源池,主要包括以下方面:

  • 修改资源池的属性。
    • 修改资源池关联的控制组。
      ALTER RESOURCE POOL respool1 WITH (control_group="Rush");

      当结果显示为如下信息,则表示修改成功。

      ALTER RESOURCE POOL
    • 修改资源池的并发量。
      ALTER RESOURCE POOL respool1 WITH (ACTIVE_STATEMENTS=15);

      当结果显示为如下信息,则表示修改成功。

      ALTER RESOURCE POOL
    • 修改资源池的内存限制。
      ALTER RESOURCE POOL respool1 WITH (MEM_PERCENT=20);

      当结果显示为如下信息,则表示修改成功。

      ALTER RESOURCE POOL

    更多使用方式请参考ALTER RESOURCE POOL

  • 删除一个资源池。
    DROP RESOURCE POOL respool1;
    DROP RESOURCE POOL

局部并发管理

局部并发量,又称资源池并发量,是指各个资源池上允许运行的最大作业并发量。资源池并发量是有资源池参数“ACTIVE_STATEMENTS”来限定的。

一般而言,全局并发量应该大于局部并发量之和。如果全局并发量小于局部并发量,则实际业务执行时的并发量不大于设置的全局并发量。

资源池并发量可以在创建资源池时指定,也可以在资源池创建成功后调整。

  • 资源池创建时指定:
    CREATE RESOURCE POOL pool1 WITH (ACTIVE_STATEMENTS=5);
  • 资源池创建成功后调整:
    ALTER RESOURCE POOL pool1 WITH (ACTIVE_STATEMENTS=3);

    资源池使用并发点数的计数方式来计算可执行的并发数量,并发点数计算公式为

    作业使用点数:active_points = (query_mem/respool_mem) * active_statements * 100

    资源池总点数:total_points = active_statements * 100

    单位点数: 100

    说明:

    1.作业不使用query_mem时会使用单位点数。

    2. 当资源池总点数耗尽后,会触发排队操作,队列满足先进先出。

查看当前资源池的信息

  • 不允许使用insert、update、delete、truncate操作资源负载管理的系统表pg_resource_pool,否则会导致通过不同CN查到的pg_resource_pool表的内容不一致。
  • 不允许修改资源池的memory_limit、max_dop和cpu_affinity属性。
  • 查看某一用户所绑定的资源池。
    SELECT rolrespool FROM PG_AUTHID WHERE rolname = 'rolename';
      rolrespool  
    --------------
     default_pool
    (1 row)
  • 查看当前集群中所有的资源池信息。
    SELECT * FROM PG_RESOURCE_POOL;
     respool_name | mem_percent | cpu_affinity |    control_group    | active_statements | max_dop | memory_limit | parentid | io_limits | io_priority 
    --------------+-------------+--------------+---------------------+-------------------+---------+--------------+----------+-----------+-------------
     default_pool |         100 |           -1 | DefaultClass:Medium |                -1 |       1 | 8GB          |        0 |         0 | None
    (1 row)

查看资源池的控制组信息

执行如下命令查看某个资源池关联的控制组信息。命令中“resource_pool_a1”为资源池名称。
SELECT * FROM gs_control_group_info('resource_pool_a1');
        name         |  class  |  workload   | type  | gid | shares | limits | rate | cpucores
---------------------+---------+-------------+-------+-----+--------+--------+------+----------
 class_a:workload_a1 | class_a | workload_a1 | DEFWD |  87 |     30 |      0 |    0 | 0-3
(1 row)
表3 gs_control_group_info属性

属性

属性值

说明

name

class_a:workload_a1

class和workload名称

class

class_a

Class控制组名称

workload

workload_a1

Workload控制组名称

type

DEFWD

控制组类型(Top、CLASS、BAKWD、DEFWD、TSWD)

gid

87

控制组id

shares

30

占父节点CPU资源的百分比

limits

0

占父节点CPU核数的百分比

rate

0

Timeshare中的分配比例

cpucores

0-3

CPU核心数

分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

跳转到云社区