首页 > 其他分享 >openGauss 5.0.0 资源管控功能介绍

openGauss 5.0.0 资源管控功能介绍

时间:2023-08-04 13:44:21浏览次数:47  
标签:5.0 gs 管控 控制组 cgroup openGauss class 资源

openGauss 5.0.0 资源管控功能介绍

严少安2023-07-12 228

ogbanner.png

openGauss 5.0.0 在资源管控方面有了显著的提升。在原生的 PostgreSQL 中其实并没有资源管控特性,但是在 EDB 版本,及其他云厂的 PG 中,增加了资源管控能力,对于 Serverless 时代的数据库而言,资源管控能力是非常重要的,因为它可以直接影响系统的性能和稳定性,通过资源管理可以来均衡业务流对数据库资源的利用,或控制不同用户的资源分配。本文将重点介绍 openGauss 5.0.0 的资源管控功能。

概念综述

openGauss 5.0.0 的资源管控功能体现在其强大的资源管理能力上。openGauss 对于系统资源的管理可以有效地管理和限制数据库实例对系统资源的占用。

这里涉及到几个核心概念

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

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

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

  • Cgroup
    openGauss 的资源控制特性使用 Linux 内核的 Cgroup 特性实现,通常情况下,openGauss 的 Cgroup 拥有整个系统 80% 的动态资源,但它不能超过 95% 的硬性限制。
    这里补充一个知识点,如何确认当前系统以及初始化了 cgroup 资源,可以使用 dmesg 命令查看系统开机信息,示例如下:

[root@shawnyan ~]# dmesg | grep cgroup [ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Initializing cgroup subsys cpuacct [ 1.090659] Initializing cgroup subsys memory [ 1.090670] Initializing cgroup subsys devices [ 1.090672] Initializing cgroup subsys freezer [ 1.090677] Initializing cgroup subsys net_cls [ 1.090686] Initializing cgroup subsys blkio [ 1.090688] Initializing cgroup subsys perf_event [ 1.090693] Initializing cgroup subsys hugetlb [ 1.090695] Initializing cgroup subsys pids [ 1.090696] Initializing cgroup subsys net_prio

启用资源管控功能

为了便于开发者或初学者学习,openGauss 分别推出了 企业版、极简版、轻量版和分布式版本。本文案例使用的是企业版,基于 CentOS 7.9 系统,安装包下载页面在这里。也只能用企业版,因为只有企业版才具备完整的集群管理功能,才能进行相关功能测试验证。

企业版的安装步骤中已包含 cgroup 相关配置,这里不做过多描述。

先看安装完成后的版本信息和集群状态,都是 Normal。

og01.png

更改 use_workload_manager 参数,开启基于资源池的资源负载管理功能。
更改成功后,需要重启集群,以使其生效。
重启完成后,可以通过系统表 gs_all_control_group_info 查看当前集群的控制组信息。

og02.png

当然,如果 cgroup 配置出现问题,或者不支持资源管控特性,则会报错:

omm=# SELECT * FROM gs_all_control_group_info; ERROR: cgroup is not initialized!

查看控制组信息

openGauss 提供了 gs_cgroup 命令,用于管理各节点上的 Gauss cgroup。可以用来创建默认控制组、删除控制组、挂载和卸载控制组。当然也可以显示控制组信息。

例如,调用命令 gs_cgroup -p 显示控制组配置信息。

og03.png

再如,调用命令 gs_cgroup -P 显示整个集群的所有 cgroups 树信息。

og04.png

gs_cgroup 还有其他用法,这里不做过多介绍,具体用法建议参考 gs_cgroup --help

创建子 Class 控制组 和 Workload 控制组

  • 创建名称为 class_a 和 class_b 的子 Class 控制组,CPU 资源配额分别为 Class 的 40% 和 20%。
gs_cgroup -c -S class_a -s 40 gs_cgroup -c -S class_b -s 20
  • 创建子 Class 控制组 class_a 下名称为 wd_a1 和 wd_a2 的 Workload 控制组,CPU资源配额分别为 class_a 控制组的 20% 和 60%。
  • 创建子 Class 控制组 class_b 下名称为 wd_b1 和 wd_b2 的 Workload 控制组,CPU资源配额分别为 class_b 控制组的 40% 和 50%。
gs_cgroup -c -S class_a -G wd_a1 -g 20 gs_cgroup -c -S class_a -G wd_a2 -g 60 gs_cgroup -c -S class_b -G wd_b1 -g 40 gs_cgroup -c -S class_b -G wd_b2 -g 50

创建成功后,通过系统表查看设定信息。

og05.png

创建资源池

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

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

  • 创建组资源池关联到指定的子 Class 控制组。

例如下面:名称为 res_pool_a 的组资源池关联到了 class_a 控制组。

CREATE RESOURCE POOL res_pool_a WITH (control_group='class_a'); CREATE RESOURCE POOL res_pool_b WITH (control_group='class_b');
  • 创建业务资源池关联到指定的 Workload 控制组。

例如下面:名称为 res_pool_a1 的业务资源池关联到了 wd_a1 控制组。

CREATE RESOURCE POOL res_pool_a1 WITH (control_group='class_a:wd_a1'); CREATE RESOURCE POOL res_pool_a2 WITH (control_group='class_a:wd_a2'); CREATE RESOURCE POOL res_pool_b1 WITH (control_group='class_b:wd_b1'); CREATE RESOURCE POOL res_pool_b2 WITH (control_group='class_b:wd_b2');

og06.png

查看当前集群中所有的资源池信息

以上所有资源配置完成后,通过系统表 PG_RESOURCE_POOL 查看当前集群所有资源池信息。

SELECT * FROM PG_RESOURCE_POOL;

og07.png

对于表 PG_RESOURCE_POOL 字段的含义,可以参考下面这个栗子:

(shawnyan@192) [dolphindb] 17:45:44> SELECT * FROM PG_RESOURCE_POOL; +-[ RECORD 1 ]------+---------------------+ | respool_name | default_pool |资源池名称。 | mem_percent | 100 |最大占用内存百分比。 | cpu_affinity | -1 |CPU亲和性,保留参数。 | control_group | DefaultClass:Medium |资源池关联的控制组。 | active_statements | -1 |资源池允许的最大并发数。-1为不限制并发数量,最大值不超过INT_MAX。 | max_dop | 1 |开启SMP后,算子执行的并发度,保留参数。 | memory_limit | 8GB |内存使用上限,保留参数。 | parentid | 0 |父资源池OID。 | io_limits | 0 |每秒触发IO的次数上限。行存单位是万次/s,列存是次/s。0表示不控制,最大值不超过INT_MAX。 | io_priority | None |IO利用率高达90%时,重消耗IO作业进行IO资源管控时关联的优先级等级。None表示不控制。 | nodegroup | installation |资源池所在的逻辑集群的名称(单机下不生效)。 | is_foreign | f |资源池不用于逻辑集群之外的用户(单机下不生效)。 | max_worker | [null] |只用于扩容的接口,表示扩容数据重分布时,表内插入并发度。 +-------------------+---------------------+

查看某个资源池关联的控制组信息

可以通过方法 gs_control_group_info 来查看某个资源池关联的控制组信息。

SELECT * FROM gs_control_group_info('res_pool_a1'); SELECT * FROM gs_control_group_info('res_pool_b2');

og08.png

需要区分的是, shares 表示占父节点CPU资源的百分比; limits 表示占父节点CPU核数的百分比。

Not The End.

能够顺利安装 openGauss 5.0.0 企业版,并成功开启资源控制特性,完成创建控制组、资源池,这只是开始。
还有更多相关课题有待研究,比如:

  • 如何加强用户级别的资源控制能力,按用户、角色分配不同的资源,并且控制相关权限,以提升系统的安全性,避免权限过大或出现“提权”情况导致的资源浪费。
  • 如何控制内存、IO、带宽,使得管理员可以对资源进行更加灵活和精细的控制。
  • 建设资源管控相关的监控能力,完善可视化监控的能力,及处理相关告警和自动化维护的能力。
  • openGauss 5.0.0 的资源负载控制能力在面对大规模、高负载的业务场景下,如何保证系统的高性能和稳定性。

对于 openGauss 的更多探索,还将继续。

标签:5.0,gs,管控,控制组,cgroup,openGauss,class,资源
From: https://www.cnblogs.com/yaoyangding/p/17605679.html

相关文章

  • 基于区块链技术结合联邦学习技术的安全医疗5.0系统 论文分析
    名词解释:IOMT(InternetofMedicalThings):医疗物联网,是将IOT技术应用到医疗保健领域的产物。其重点是连接医疗设备与系统,实现医疗信息和数据的可连接和交换。ML(MachineLearning):机器学习-典型的机器学习任务包括分类、回归、聚类等。常用算法有线性回归、决策树、支持......
  • openGauss学习笔记-29 openGauss 高级数据管理-UNION子句
    openGauss学习笔记-29openGauss高级数据管理-UNION子句UNION计算多个SELECT语句返回行集合的并集。UNION内部的SELECT语句必须拥有相同数量的列,列也必须拥有相似的数据类型。同时,每条SELECT语句中的列的顺序必须相同。29.1语法格式UNION:结果中如果出现相同的值,仅保留一个。......
  • openGauss学习笔记-28 openGauss 高级数据管理-NULL值
    openGauss学习笔记-28openGauss高级数据管理-NULL值NULL值代表未知数据。无法比较NULL和0,因为它们是不等价的。创建表时,可以指定列可以存放或者不能存放NULL值,详情请参见NOTNULL约束。本节介绍ISNULL和ISNOTNULL操作符。创建表customer_t1,数据如下:openGauss=#SELECT*F......
  • openGauss学习笔记-27 openGauss 高级数据管理- JOIN
    openGauss学习笔记-27openGauss高级数据管理-JOINJOIN子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。在openGauss中,JOIN有五种连接类型:CROSSJOIN:交叉连接INNERJOIN:内连接LEFTOUTERJOIN:左外连接RIGHTOUTERJOIN:右外连接FULLOUTERJOIN:全外连......
  • “金税四期”背景下企业税务风险管控有哪些具体措施?
    “金税四期”目前已实行两年,税务机关对企业的税务监管也更加严格,倒逼企业提升自身的税务管理水平,随着税务风险的提高,企业自身的经济压力也加大,不利于企业的发展,因此,企业需要采取一定措施进行应对。用友BIP税务云有四大措施助力企业税务风险管理。1、构建风险指标体系· 结合企业需......
  • 【15.0】DRF之权限控制
    【一】ACL的权限控制ACL(访问控制列表)是一种用于权限控制的技术,可以限制用户对系统资源的访问和操作。在针对互联网用户的产品中,ACL被广泛应用于管理用户对特定功能或数据的权限。ACL(访问控制列表)的权限控制:(针对互联网用户的产品)用户表idnamepassword1......
  • openGauss数据库常用操作命令
    1.以操作系统用户omm登录数据库主节点su-omm1.1启动服务分布式openGauss:gs_om-tstart启动服务gs_om-trestart重启服务集中式openGauss:gs_om-tstop关闭服务gs_om-tstart启动服务1.2使用“gs_om-tstatus–detail”命令查询openGauss各实例状......
  • 【我和openGauss的故事】openGauss的WDR报告解读
    【我和openGauss的故事】openGauss的WDR报告解读在Oralce数据库中,遇到性能问题,我们通常会查看有无对应时间段的快照,生成awr报告并进一步分析(AWR是AutomaticWorkloadRepository的简称,中文叫着自动工作量资料档案库,是Oracle数据库用于收集、管理和维护数据库整个运行期间和性能相关......
  • 【我和openGauss的故事】openGauss易知易会的几个实用特性
    【我和openGauss的故事】openGauss易知易会的几个实用特性使用openGauss已经有很长一段时间了,本文将介绍几个简单易用的数据库特性。单列显示整行数据where比较列合并独立写布尔列using关键字domain单列显示整行数据首先我们准备测试数据表:createtableusers(idint,nametext,ema......
  • 祝贺!openGauss社区技术委员会主席李国良当选2023 IEEE FELLOW
    祝贺!openGauss社区技术委员会主席李国良当选2023IEEEFELLOW[openGauss](javascript:void(0);)2022-11-2917:56发表于广东近日,IEEE(InstituteofElectricalandElectronicEngineers)公布了2023年度Fellow名单,全球共有319位学者入选,华人学者占104位(约占总人数的31%)。其中,openGa......