在Serverless Computing資源執行讀寫任務時,部分請求具有不可預測性,可能導致計算資源瞬間耗盡,影響其他任務。Hologres持續建設智能化能力:V3.1起支援自適應大任務隔離,V4.1起支援自適應負載隔離,可自動識別大任務並動態使用Serverless資源執行,提升系統穩定性和資源使用率。
Hologres支援使用Serverless Computing資源執行讀寫任務,可針對SQL、使用者或查詢隊列Query Queue預定義,將已知的任務路由到Serverless資源中執行。但實際生產情境中,存在部分讀寫請求,無法預知其是否會消耗過多計算資源、可能由哪個使用者發起、存在什麼樣的分類特徵,該部分請求可能會瞬間將計算群組的計算資源打滿,從而影響其他讀寫請求。
針對該情境,Hologres持續建設智能化能力,支援自適應Serverless計算:
V3.1版本起支援“自適應大任務隔離”,可以由系統自動判斷出“大任務”,並自動使用Serverless資源執行。
V4.1版本起支援“自適應負載隔離”,系統根據負載情況自動調整“大任務”閾值,並在負載高時自動使用Serverless資源執行“大任務”,而在負載低時不作用。
功能原理
如SQL使用的Serverless資源量中描述,SQL使用的Serverless資源量由Quota、Max Cores、Required Cores三者的最小值決定。其中,Required Cores支援通過Hologres系統自動估算。Hologres會根據SQL的複雜度和相關表的資料量等因素,綜合估算出該SQL使用Serverless Computing的最優資源量。
依託於Hologres針對SQL自動估算的最優資源量,可定義資源量閾值,超過閾值的SQL被定義為“大任務”,從而完成如下自適應Serverless計算情境:
自適應大任務隔離:使用者自訂“大任務”資源量閾值,自動使用Serverless資源執行全部“大任務”。
自適應負載隔離:系統根據負載動態調整“大任務”資源量閾值,在負載高時自動使用Serverless資源執行“大任務”。
Hologres支援自訂兩類資源量閾值,包括絕對閾值和比例閾值。當系統自動估算的Required Cores同時超過兩個閾值時,即Required Cores > max(比例閾值, 絕對閾值),SQL才會自動使用Serverless資源執行。針對“自適應大任務隔離”功能,支援使用者修改上述兩個閾值。
hg_adaptive_serverless_computing_min_resource_ratio_threshold:比例閾值係數,預設值0.3。計算群組型執行個體:比例閾值 = 比例閾值係數 × 計算群組計算資源;通用型執行個體:比例閾值 = 比例閾值係數 × 執行個體計算資源。hg_adaptive_serverless_computing_min_cores_threshold:絕對閾值,預設值256,單位CU。
-- Session層級修改
SET hg_adaptive_serverless_computing_min_resource_ratio_threshold = 0.3;
SET hg_adaptive_serverless_computing_min_cores_threshold = 256;
-- User層級修改
ALTER USER "<role_name>" IN DATABASE <db_name> SET hg_adaptive_serverless_computing_min_resource_ratio_threshold = 0.3;
ALTER USER "<role_name>" IN DATABASE <db_name> SET hg_adaptive_serverless_computing_min_cores_threshold = 256;
-- DB層級修改
ALTER DATABASE <db_name> SET hg_adaptive_serverless_computing_min_resource_ratio_threshold = 0.3;
ALTER DATABASE <db_name> SET hg_adaptive_serverless_computing_min_cores_threshold = 256;自適應負載隔離(Beta)
功能使用
自適應負載隔離支援系統基於負載情況自動判斷是否使用,因此建議DB層級開啟。通過如下命令可針對DB層級開啟該功能。
-- DB層級開啟自適應負載隔離
ALTER DATABASE <db_name> SET hg_adaptive_serverless_computing_enable_load_isolation = on;自適應大任務隔離
功能使用
通過如下命令開啟自適應大任務隔離功能,建議User層級或DB層級開啟。
V4.1版本前,兩個參數需同時開啟,該功能才會生效。
V4.1版本起,廢棄
hg_enable_adaptive_serverless_computing參數,僅需開啟hg_adaptive_serverless_computing_enable_big_query_isolation參數即可。
-- Session層級開啟
SET hg_enable_adaptive_serverless_computing = on;
SET hg_adaptive_serverless_computing_enable_big_query_isolation = on;
-- User層級開啟
ALTER USER "<role_name>" IN DATABASE <db_name> SET hg_enable_adaptive_serverless_computing = on;
ALTER USER "<role_name>" IN DATABASE <db_name> SET hg_adaptive_serverless_computing_enable_big_query_isolation = on;
-- DB層級開啟
ALTER DATABASE <db_name> SET hg_enable_adaptive_serverless_computing = on;
ALTER DATABASE <db_name> SET hg_adaptive_serverless_computing_enable_big_query_isolation = on;功能驗證
由於自適應大任務隔離功能是否應用會受系統自動估算邏輯影響,Hologres提供資源預估函數,用以計算對應SQL由系統自動估算的Required Cores數量以及自適應Serverless功能是否生效。
-- SQL不涉及單引號轉義時使用
SELECT * FROM hologres.hg_estimate_adaptive_serverless_computing('select * from tbl;');
-- SQL涉及單引號轉義時使用
SELECT * FROM hologres.hg_estimate_adaptive_serverless_computing($$insert into test_tbl_dst_1 select * from test_tbl_src;$$);函數有如下傳回值:
傳回值名稱 | 說明 |
estimated_cores | 該SQL由系統自動估算的Required Cores數量。 |
status | 該SQL在當前參數配置下是否受自適應Serverless功能作用,並自動使用Serverless資源執行。
|
adaptive_serverless_computing_min_ratio_threshold | 當前配置的比例閾值係數。 |
adaptive_serverless_computing_min_cores_threshold | 當前配置的絕對閾值。 |