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