云原生数据仓库 AnalyticDB PostgreSQL 版支持资源队列(Resource Queue)和资源组(Resource Group)两种资源管理方式对数据库资源进行管理,为不同类别的业务查询之间提供资源隔离,从而确保资源得到充分而合理的利用,保证不同服务需求之间的独立性。本文介绍如何通过资源队列和资源组这两种资源管理方式对云原生数据仓库 AnalyticDB PostgreSQL 版数据库的CPU、内存、磁盘落盘等资源进行管理。
资源队列管理
资源队列基于轻量级锁等技术实现,支持对云原生数据仓库 AnalyticDB PostgreSQL 版数据库的并发查询数、查询使用的内存、查询的CPU优先级等资源类别进行管理。具体使用方式,请参见使用Resource Queue(资源队列)进行负载管理。
资源组管理
资源组基于共享内存、cgroup等技术实现,支持对云原生数据仓库 AnalyticDB PostgreSQL 版数据库的并发查询数、查询使用的内存、查询的CPU使用率、磁盘落盘阈值等资源类别进行管理,支持通过控制台操作。具体使用方式,请参见使用Resource Group(资源组)进行负载管理。
查询资源管理方式
您可以执行SQL查询当前云原生数据仓库 AnalyticDB PostgreSQL 版实例所使用的资源管理方式,具体代码如下:
SHOW gp_resource_manager;
执行结果:
group:使用资源组的资源管理方式。
queue:使用资源队列的资源管理方式。
选择资源管理方式
您可以根据业务情况,选择合适的资源管理方式。资源队列与资源组的区别如下:
业务 | 资源队列 | 资源组 |
管控项 | CPU、内存、优化器 | CPU、内存、优化器 落盘、最小管控优化器代价 |
使用功能方式 | 基于用户组 | 基于用户组 |
并发管理 | 基于锁,容易产生死锁 | 基于共享内存,不会产生死锁 |
CPU管理 | 基于优先级,模糊管理 | 基于cgroup,精确管理 |
内存管理 | 支持 | 支持 |
管控级别 | 查询级别 | 事务级别 |
以下列举了不同业务场景选择的资源管理方式:
采用资源队列的管理方式。
不关注细粒度资源管理,希望仅仅通过CPU优先级对几类业务进行简单的资源配置,不在乎资源队列引发的死锁问题,可以在业务中进行重试。
采用资源组的管理方式。
希望尽量避免资源队列偶发死锁带来的业务重试需要,希望完全消除资源队列导致的死锁问题。
希望通过控制台管理资源配置,不希望通过SQL的方式进行资源管理。
有细粒度、精确地进行资源管理的需求,比如对几类不同的业务分别限制CPU上限或者CPU时间片分配比例,在同业务之间达到比较好的资源隔离效果。