GaussDB-使用须知

184 阅读7分钟

GaussDB-使用须知

操作场景

云数据库GaussDB管理平台(TPOPS)的资源管理功能支持对用户粒度的CPU、内存、IO、连接数和并发数5种资源的管控。该功能可以实现多租户场景下资源的精准划分和控制,做到资源隔离,保证不互相影响,同时可以解决高负载场景下资源不足导致实例不可服务的问题。

资源管理概述
  • GaussDB的资源管理功能是通过资源池和控制组实现的。
  • 资源池是GaussDB实现的逻辑资源实体,每个资源池可以分配适当配额的CPU、内存、IO、并发数和连接数资源。其中IO、内存、并发数、连接数这4种资源的配额可以在资源池中以数值的方式直接指定,而资源池对CPU资源的管控需要通过绑定控制组实现。
  • 控制组是GaussDB利用Linux的Cgroups机制来进行CPU资源管理的实体,可以在控制组中设置CPU配额与核数资源的分配。
  • 资源管理功能的流程如图1,在控制组管理界面完成控制组的创建,在资源池管理界面完成资源池的创建(包括关联控制组和设置其他资源配额),在用户管理界面给数据库用户绑定创建好的资源池即可实现该用户下作业的资源管理。一个资源池对应一个用户,相当于该用户会受到资源池所分配到的资源的限制。

图1 资源管理基础框架

控制组类别与层级划分
  • GaussDB控制组的架构如图2所示。Class控制组为数据库业务运行所在的顶层控制组,用户可以在Class控制组下自定义控制组来进行CPU资源的分配。数据库实例部署时会在Class控制组下自动生成默认控制组“DefaultClass”。DefaultClass下层的Medium控制组会含有系统触发的作业在运行,该控制组不允许进行CPU资源的修改,且运行在该控制组上的作业不受资源管理的控制,所有作业都跑在这个控制组上的时候,资源不受限制,相互争抢。所以推荐用户自定义控制组来设置CPU资源比例。

    图2 GaussDB控制组结构

  • 图3所示,在顶层Class控制组下允许用户自定义的控制组分为两个层级,第一个层级是子class控制组,创建子class控制组设置CPU资源会直接占用顶级Class控制组的CPU资源(DefaultClass控制组为默认控制组,固定占有顶级Class控制组20%的CPU资源);第二个层级是workload控制组,在每个子class控制组下可以创建多个workload控制组,来对它们所属的子class控制组占有的CPU资源进行更细致地划分。用户业务如有对CPU分层管理的需求,可灵活选择创建不同层级的控制组;如无特别要求,只使用子class层级的控制组即可。

    图3 顶层Class控制组层级划分

资源池类别与层级划分
  • 资源池的类别与层级由它绑定的控制组的类别与层级决定:绑定了子class控制组的资源池被称为组资源池,绑定了workload控制组的资源池被称为业务资源池。在开启了资源负载管理功能之后,系统会自动创建默认资源池default_pool,default_pool会绑定默认CPU控制组DefaultClass:Medium,对其他资源也均不设限制。客户可根据自身业务对CPU资源层级管理的需要,来选择创建不同层级的资源池。如无特别要求,只使用组资源池即可。

  • 创建组资源池时,所要绑定的子class控制组必须没有被其他组资源池绑定。

  • 创建业务资源池时,需要先选定一个子class控制组,再在该子class控制组下选定一个要绑定的workload控制组。需要注意的是,所要绑定的workload控制组必须没有被其他业务资源池绑定,且该workload控制组所属的子class控制组必须已经被其他组资源池绑定。

  • 特别说明,资源池的层级由且仅由它所绑定的控制组的层级决定。因此,组资源池与其下属的业务资源池仅有CPU资源有包含关系,即分配给业务资源池的CPU资源占据的是其所属组资源池的CPU资源的配额,但是内存、IO、连接数、并发数资源是独立占用GaussDB资源的,没有包含关系。

    图4 资源池与控制组绑定关系及层级划分

用户类别与层级划分
  • 在创建资源池时完成了CPU控制组的绑定和其他资源的配额设置后,等价于获得了一个指定资源的容器,下一步是将其关联到具体的数据库用户,从而实现该用户的资源分配与隔离。

  • 组用户关联组资源池,业务用户关联业务资源池。客户可以根据自身业务需要,指定用户关联不同的资源池。如不显式指定用户关联的资源池,则会默认关联默认资源池default_pool。如无特别要求,只创建组用户关联组资源池即可。

  • 创建用户时,选择关联组资源池,创建出来的用户即为组用户,并关联到指定的组资源池。

  • 创建用户时,选择关联业务资源池,创建出来的用户即为业务用户,并关联到指定的业务资源池。需要注意的是,因为业务资源池一定从属于某一个组资源池,所以业务用户在绑定业务资源池时,也需要先指定一个组资源池,这个组资源池必须是已经被某个组用户绑定了的,这样创建出来的业务用户就会从属于这个组用户。然后再选择绑定这个组资源池下的某个业务资源池。

    图5 用户与资源池绑定关系及层级划分

资源管理规划与流程

使用资源管理功能前,需要先根据业务模型完成租户资源的规划。业务运行一段时间后,可以根据资源的使用情况再进行配置调整。假设某大型企业内的两个部门共用同一套数据库实例,GaussDB通过将同一个部门需要使用的系统资源集合划分为系统的一个租户,以此来实现不同部门间的资源隔离,其资源规划如下表所示。

表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 | |

图6 资源管理流程

约束限制
  • 主备版实例不支持资源管理特性。
  • 分布式实例8.100及以上版本支持资源管理特性。
  • 管控Agent版本24.1.30及以上版本支持资源管理特性。
  • 使用资源管理功能需要开启GUC参数enable_control_group、enable_memory_limit,这两个参数在8.100.0及以上分布式实例中默认已开启。

更多详情请参考GaussDB 文档中心:doc.hcs.huawei.com/db/zh-cn/ga…