数据库资源负载管理(上篇)

语言: CN / TW / HK

资源负载管理概述

功能描述

openGauss提供了资源负载管理手段,来均衡任务对系统资源的利用。

相关概念

资源管理

openGauss对于系统资源的管理范围包含CPU资源、内存资源、IO资源和存储资源。通过对系统的资源进行合理的分配,避免发生资源的不合理占用导致系统运行效率下降或者引发系统运行问题。

控制组

控制组(Cgroups)是control groups的缩写,是Linux内核提供的一种可以限制、记录、隔离进程组所使用的物理资源(如:CPU、内存、IO等)的机制。如果一个进程加入了某一个控制组,该控制组对Linux的系统资源都有严格的限制,进程在使用这些资源时,不能超过其最大限制。更多Cgroups的原理介绍,请查看相关操作系统的产品手册。

资源池

资源池(Resource Pool)是openGauss提供的一种配置机制,用于对主机资源(内存、IO)进行划分并提供SQL的并发控制能力。资源池通过绑定Cgroups对资源进行管理。用户通过绑定资源池可以实现对其下作业的资源负载管理。

资源管理准备

资源规划

完成资源负载管理功能配置前,需要先根据业务模型完成租户资源的规划。业务运行一段时间后,可以根据资源的使用情况再进行配置调整。

本章节我们假设某大型企业内的两个部门共用同一套集群,openGauss通过将同一个部门需要使用的系统资源集合划分为系统的一个租户,以此来实现不同部门间的资源隔离,其资源规划如表1所示。

表 1 租户资源规划
租户A

参数名称 取值样例
子Class控制组 class_a
Workload控制组 workload_a1,workload_a2
组资源池 resource_pool_a
业务资源池 resource_pool_a1,resource_pool_a2
组用户 tenant_a
业务用户 tenant_a1,tenant_a2

租户B

参数名称 取值样例
子Class控制组 class_b
Workload控制组 workload_b1,workload_b2
组资源池 resource_pool_b
业务资源池 resource_pool_b1,resource_pool_b2
组用户 tenant_b
业务用户 tenant_b1,tenant_b2

启动资源负载管理功能

背景信息

使用资源负载管理功能前,需要参考本节完成参数配置。

前提条件

  • 在openGauss中,如果需要对系统资源进行管理,用户需要拥有DBA权限。通过执行如下语法查询哪些用户拥有该权限:
openGauss=# SELECT rolname FROM pg_roles WHERE rolsystemadmin = 't';
 rolname
---------
 omm
 Jack
(2 rows)

  • 如果想要将一个用户纳入资源负载管理的范围,则此用户必须具有login权限。通过执行如下语法查询哪些用户拥有该权限:
openGauss=# SELECT rolname FROM pg_roles WHERE rolcanlogin = 't';
 rolname
---------
 omm
(1 row)

须知: 如果一个用户的login权限被取消,那么他的resource pool将会自动修改为default_pool。default_pool的详细介绍请参见表2。

操作步骤

DBA权限用户可以通过如下步骤启动基于资源池的资源负载管理。此处以omm用户为例进行描述。

1、以操作系统用户omm登录openGauss主节点。
2、开启Control Group功能。

gs_guc reload -Z datanode -N all -I all -c "enable_control_group=on"

3、开启基于资源池的资源负载管理功能。

gs_guc set -Z datanode -N all -I all -c "use_workload_manager=on" 

4、开启对数据库的常驻后备线程的控制。

gs_guc set -Z datanode -N all -I all -c "enable_backend_control=on" 

5、 开启对数据库的常驻后备线程中的autoVacuumWorker线程的控制。

gs_guc set -Z datanode -N all -I all -c "enable_vacuum_control=on"

6、 重启数据库使参数设置生效。

gs_om -t stop && gs_om -t start