高斯数据库 (gaussDB) - 资源负载管理 - 资源管理准备 (2)

创建资源池

背景信息

GaussDB 200 支持通过创建资源池对主机资源进行划分。开启资源负载管理之后,仅使 用默认资源池并不能满足业务对资源负载管理的诉求,必须根据需要创建新的资源池,对系统资源进行重分配,来满足实际业务对系统资源精细管理的需要。多租户场 景通过两级资源池(组资源池和业务资源池)进行资源管理。各类型资源池的特点如表 13-3 所示。
表 13-3 各类资源池的特点
image.png

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

  • GaussDB 200 不允许对 default_pool 参数进行修改。
  • default_pool 资源池关联的业务并发量会受到全局并发参数 max_active_statements 的
    限制。

前提条件

已熟悉 16.14.60 CREATE RESOURCE POOL、16.14.16 ALTER RESOURCE POOL 和
16.14.93 DROP RESOURCE POOL 语法的使用。

操作过程

创建资源池
步骤 1 2.2.3 使用 gsql 连接数据库。
步骤 2 创建组资源池关联到指定的子 Class 控制组。例如下面:名称为“resource_pool_a”的组
资源池关联到了“class_a”控制组。

CREATE RESOURCE POOL  resource_pool_a WITH ( control_group=' class_a ');
CREATE RESOURCE POOL  resource_pool_b WITH ( control_group=' class_b ');
CREATE RESOURCE POOL

步骤 3 创建业务资源池关联到指定的 Workload 控制组。例如下面:名称为
“resource_pool_a1”的业务资源池关联到了“workload_a1”控制组。

CREATE RESOURCE POOL  resource_pool_a1 WITH ( control_group=' class_a:workload_a1 ');
CREATE RESOURCE POOL  resource_pool_a2 WITH ( control_group=' class_a:workload_a2 ');
CREATE RESOURCE POOL  resource_pool_b1 WITH ( control_group=' class_b:workload_b1 ');
CREATE RESOURCE POOL  resource_pool_b2 WITH ( control_group=' class_b:workload_b2 ');
CREATE RESOURCE POOL

说明

  • 如果在创建资源池的时候不指定所关联的控制组,则该资源池会被关联到默认控制组
    (DefaultClass 控制组下的 "Medium" Timeshare 控制组)。
  • control_group 取值区分大小写,指定时要使用单引号。
  • 若数据库用户指定 Timeshare 控制组代表的字符即 "Rush"、“High”、“Medium"或"Low" 其
    中一种,如 control_group 的字符串为 "High”,代表资源池指定到 DefaultClass 控制组下的
    “High” Timeshare 控制组。

管理资源池

修改资源池的属性。例如下面:修改资源池“resource_pool_a2”关联的控制组为
“class_a:workload_a1”(假设 class_a:workload_a1 未被其他资源池关联)。

ALTER RESOURCE POOL  resource_pool_a2 WITH ( control_group=" class_a:workload_a1 ");
ALTER RESOURCE POOL

删除资源池

删除资源池。例如下面删除资源池“resource_pool_a2”
DROP RESOURCE POOL resource_pool_a2 ;
DROP RESOURCE POOL

说明
  • 如果某个角色已关联到该资源池,无法删除。
  • 多租户场景下,如果删除组资源池,其业务资源池都将被删除。只有不关联用户时,资源池 才能被删除。

查看资源池的信息

  • 不允许使用 INSERT、UPDATE、DELETE、TRUNCATE 操作资源负载管理的系统表
    pg_resource_pool,否则会导致通过不同 CN 查到的结果不一致。
  • 不允许修改资源池的 memory_limit 和 cpu_affinity 属性。
  • 查看当前集群中所有的资源池信息。
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
resource_pool_a | 20 | -1 | class_a | 10
| 1 | 8GB | 0 | 0 | None
resource_pool_b | 20 | -1 | class_b | 10
| 1 | 8GB | 0 | 0 | None
resource_pool_a1 | 20 | -1 | class_a:workload_a1 | 10
| 1 | 8GB | 16970 | 0 | None
resource_pool_a2 | 20 | -1 | class_a:workload_a2 | 10
| 1 | 8GB | 16970 | 0 | None
resource_pool_b1 | 20 | -1 | class_b:workload_b1 | 10
| 1 | 8GB | 16971 | 0 | None
resource_pool_b2 | 20 | -1 | class_b:workload_b2 | 10
| 1 | 8GB | 16971 | 0 | None
(7 rows)
  • 查看某个资源池关联的控制组信息,具体内容可以参考
    gs_control_group_info(pool text)。
    如下命令中“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)

表 13-5 gs_control_group_info 属性
image.png

  
    展开阅读全文