數據庫的系統資源(CPU資源、內存資源、IO資源和存儲資源)是有限的,DWS在同時運行多種類型的業務(如數據加載、批量分析、實時查詢等)時,各類型業務之間可能會競爭資源,從而出現資源性能瓶頸,導致吞吐量下降,造成整體的查詢性能低下。那么對系統的資源進行合理的分配,能避免產生資源不合理利用而導致的系統運行效率下降等問題。
DWS提供了資源管理功能,用戶可以根據自身業務將資源按需劃分成不同的資源池,不同資源池之間資源互相隔離。再通過關聯數據庫用戶將其關聯至不同的資源池,用戶SQL查詢時將根據“用戶-資源池”的關聯關系將查詢轉至資源池中執行。通過指定資源池上可并行運行的查詢數、單查詢內存上限以及資源池可使用的內存和CPU資源,從而實現對不同業務之間的資源限制和隔離,滿足數據庫混合負載需求,保證執行查詢時有充足的系統資源,確保查詢性能。當集群轉換為邏輯集群后,可以選擇指定的邏輯集群進行同樣的資源池的創建、修改、刪除。
須知
- 該特性僅8.0及以上集群版本支持。
- 離線擴容過程中不支持資源管理功能,如開啟了資源管理計劃,請在進行離線擴容操作之前停止。
打開或關閉資源管理功能
資源管理配置包括資源管理開關、全局最大并發數。這里的全局最大并發數指的是單個CN上的最大并發數,如果您通過資源管理開關關閉了資源管理功能,那么所有的資源管理功能將不可用。
資源管理功能
DWS的工作負載負載管理根據系統資源管控類型可分為:
- 計算資源管理:主要由資源池功能實現,對計算資源進行隔離和限制,防止異常SQL查詢導致集群級異常,包括:并發管理、內存管理、CPU管理以及異常規則。詳情請參見 資源池。
- 存儲空間管理:從用戶和schema兩方面實現對存儲空間的管理,防止磁盤滿和數據庫只讀,詳細請參見 空間管理。
- 資源管理計劃:按計劃進行資源管理自動配置,應對復雜多變的負載場景,實現更為靈活的資源管理,詳細請參見 資源管理計劃階段。
DWS的資源管理根據管控時機可分為:
- 運行前管理
查詢運行前,對查詢進行運行前管理,如果資源充足則查詢可以運行,否則查詢需要排隊,等待其他查詢釋放資源后才能運行。運行前管理包含并發管理和運行前 內存管理 。
- 運行中管理
查詢執行過程中,對查詢使用資源進行管控,防止低質量SQL導致集群異常。運行中管理包含運行中內存管理、CPU 管理、空間管理和異常規則 。
簡單查詢和復雜查詢
DWS提供了精細化的資源管理功能,在查詢進行資源管理前,根據查詢預期執行時間和資源消耗,將查詢劃分為執行時間長、資源消耗多的復雜查詢和執行時間短、資源消耗少的簡單查詢。簡單查詢和復雜查詢的劃分和資源消耗相關,因此根據估算內存對查詢進行劃分:
- 簡單查詢:估算內存小于32MB。
- 復雜查詢:估算內存大于等于32MB。
混合負載場景下,復雜查詢可能會長時間占用大量資源,雖然簡單查詢執行時間短、消耗資源少,但是因為資源耗盡,簡單查詢不得不在隊列中等待復雜查詢執行完成。為提升執行效率、提高系統吞吐量,DWS的“短查詢加速”功能,實現對簡單查詢的單獨管理。
- 開啟短查詢加速后,簡單查詢與復雜查詢分開管理,簡單查詢無需與復雜查詢競爭資源。
- 關閉短查詢加速后,簡單查詢與復雜查詢執行相同的工作負載管理。
雖然單個簡單作業資源消耗少,但是大量簡單作業并發運行還是會占用大量資源,因此短查詢加速開啟情況下,需要對簡單查詢進行并發管理;資源管理可能會影響查詢性能,影響系統吞吐量,因此簡單查詢不進行資源管理,異常規則也不生效。
說明基于估算內存的查詢劃分一方面依賴估算內存的準確性,另一方面查詢執行時間和CPU消耗可能與內存消耗不成正比,因此對于性能不敏感、業務明確的資源池可以通過關閉短查詢加速實現對簡單作業的資源管理和異常處理。