資源管理概述
云原生數據倉庫 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時間片分配比例,在同業務之間達到比較好的資源隔離效果。