Hologres V2.1.17 版本起支援 Serverless Computing 功能。本文為您介紹如何使用 Hologres 的 Serverless Computing 功能執行任務。
Serverless Computing支援的功能範圍
Serverless Computing支援的任務類型如下:
-
Hologres V2.1.17 版本起,支援主要的 DML 任務,包括INSERT(不含INSERT OVERWRITE)、INSERT ON CONFLICT(UPSERT)、DELETE和UPDATE。
-
Hologres V2.2.14 版本起,支援 DQL 任務。
-
Hologres V3.0.1 版本起,支援 DML 中的 COPY 任務。
-
Hologres V3.0.9 版本起,支援 DML 中的 CREATE TABLE AS(CTAS)任務。
-
Hologres V2.2.42/V3.0.19 版本起,支援 RESHARDING 任務。
-
Hologres V3.0.26 版本起,支援 DML 中的 INSERT OVERWRITE 任務(預存程序 hg_insert_overwrite),支援預存程序中的 DML 和 DQL。
-
Hologres V3.1.0 版本起,支援 DML 中的原生 INSERT OVERWRITE 文法,支援 REBUILD 任務。
-
Hologres V3.1.3 版本起,支援讀寫加密表(含 Hologres 加密內表及 MaxCompute 加密外表);讀寫 Hologres 加密內表時需開啟 GUC 參數
hg_serverless_computing_enable_encrypted_table,詳情請參見資料加密。 -
Hologres V3.1.11 版本起,支援 Compaction 任務,詳情請參見使用Serverless Computing執行Compaction任務。
-
Hologres V4.0 版本起,支援讀寫 DLF 外表,檔案格式與其他注意事項見基於DLF訪問OSS資料湖加速。
Serverless Computing支援的函數Extension擴充如下:
-
ClickHouse
-
Flow Analysis
-
PostGIS
-
RoaringBitmap
-
BSI
-
Proxima
如下情況不支援Serverless Computing:
-
唯讀從執行個體的查詢(主執行個體、計算群組執行個體可正常使用)。
-
開啟了多行DML事務的查詢,如
set hg_experimental_enable_transaction = on。 -
使用Fixed Plan的SQL。
-
跨庫查詢與寫入。
使用Serverless Computing資源執行讀寫任務
Hologres支援您靈活使用Serverless Computing資源。您可按需將單條SQL指向Serverless資源執行,或設定規則使用Serverless資源批量執行SQL。
Hologres支援如下使用方式,在SQL執行前便將其調度到Serverless資源中,按優先順序由高到低生效:
-
SQL層級(Session層級):設定
hg_computing_resource參數為'serverless',當前串連的讀寫請求將使用Serverless資源執行。 -
使用者層級:使用者層級設定
hg_computing_resource參數為'serverless',使用Serverless資源執行。 -
查詢隊列Query Queue層級:設定查詢隊列中的全部任務均使用Serverless資源執行。
-
自適應Serverless計算:開啟後,系統自動判斷“大任務”,自動使用Serverless資源執行。
-
不符合上述條件,則使用本執行個體資源執行。
SQL執行中,也支援配置"大查詢"自動使用Serverless資源重跑,以減輕實際生產業務的負載壓力、降低OOM頻率,並提升系統穩定性。
使用Serverless資源執行SQL期間,計算資源由當前SQL獨享,不會同時執行其他SQL。
注意事項:
-
在使用Serverless Computing執行讀寫請求時,該請求由本執行個體計算資源路由至Serverless資源集區,涉及部分中繼資料處理,會消耗極少量本執行個體計算資源。通常情況可忽略,但不建議Serverless Computing請求QPS過高。
-
對於通用型執行個體,上述中繼資料處理消耗執行個體計算資源。
-
對於計算群組型執行個體,不論通過Table Group的Leader計算群組還是Follower計算群組串連,上述中繼資料處理均消耗Leader計算群組的計算資源。
SQL層級配置
您可以通過執行如下代碼,使用Serverless Computing資源執行SQL命令,推薦SESSION層級設定。
該方式常用於如下情境:
-
一次性的匯入或查詢任務,如歷史資料重新整理、表結構/屬性修改(Rebuild)等。
-
周期性的離線匯入任務,如M+1、T+1、H+1的離線資料匯入匯出,可在調度任務中增加該配置。
-
其他所有需要靈活使用Serverless資源的情境。
-- 使用Serverless Computing資源執行SQL,預設值為local,表示使用本執行個體資源執行SQL。
SET hg_computing_resource = 'serverless';
-- 提交DML後重設配置,保證非必要的SQL不會使用serverless資源。
RESET hg_computing_resource;
-
不建議資料庫層級修改。
-
可通過RESET hg_computing_resource重設配置,保證非必要的SQL不會使用Serverless資源。
使用樣本:
-- 資料準備 --
-- 建立源表
CREATE TABLE source_tbl ( id int );
-- 建立目標表
CREATE TABLE sink_tbl ( id int );
-- 源表寫入範例資料
INSERT INTO source_tbl
SELECT * FROM generate_series(1, 99999999);
-- 使用Serverless Computing資源執行SQL --
-- Session層級開啟開關
SET hg_computing_resource = 'serverless';
-- 執行SQL
INSERT INTO sink_tbl SELECT * FROM source_tbl;
-- 重設配置
RESET hg_computing_resource;
使用者層級配置
該方式常用於如下情境:
-
進階別使用者的日常使用(如Superuser)。
-
高優先順序的資料大屏,可對大屏對應資料來源中的帳號進行配置。
您可以執行如下代碼,針對某一USER或ROLE,使其發起的全部SQL均預設使用Serverless Computing資源執行。
該配置方法的優先順序高於資料庫層級配置GUC,低於Session層級配置GUC,詳情請參見GUC參數。
-- 針對某使用者在某DB下,預設使用Serverless Computing資源執行SQL
ALTER USER "<role_name>" IN DATABASE <db_name> SET hg_computing_resource = 'serverless';
-- 取消上述配置
ALTER USER "<role_name>" IN DATABASE <db_name> RESET hg_computing_resource;
查詢隊列Query Queue層級配置
Hologres支援針對某一查詢隊列,使其全部SQL均使用Serverless Computing資源執行。查詢隊列的配置詳情,請參見查詢隊列Query Queue。通過該功能,您可以藉助查詢隊列Query Queue的分類器能力,實現“某類SQL”全部使用Serverless資源執行,例如:
-
按查詢類型:INSERT、SELECT、UPDATE、DELETE等。
-
按查詢引擎:HQE、PQE、SQE、HiveQE,例如所有的MaxCompute外表非直讀任務(即SQE)均使用Serverless資源。
-
按SQL指紋:如果某個查詢pattern資源開銷較大,有穩定性風險,可設定對應的SQL指紋均使用Serverless資源。
-
按儲存模式:hot、cold,例如所有的冷存查詢均使用Serverless資源。
您可以執行如下代碼進行配置:
-
通用型執行個體
-- 設定目標Queue中的查詢全部通過Serverless資源運行 CALL hg_set_query_queue_property('<query_queue_name>', 'computing_resource', 'serverless'); -- (可選)設定目標Queue中的查詢使用Serverless資源時的優先順序,支援1-5,預設為3 CALL hg_set_query_queue_property('<query_queue_name>', 'query_priority_when_using_serverless_computing', '<priority>'); -
計算群組執行個體
-- 設定目標Queue中的查詢全部通過Serverless資源運行 CALL hg_set_query_queue_property('<warehouse_name>', '<query_queue_name>', 'computing_resource', 'serverless'); -- (可選)設定目標Queue中的查詢使用Serverless資源時的優先順序,支援1-5,預設為3 CALL hg_set_query_queue_property('<warehouse_name>', '<query_queue_name>', 'query_priority_when_using_serverless_computing', '<priority>');
自適應Serverless計算
Hologres支援自動判斷系統中的“大任務”,自動將“大任務”指向Serverless資源執行。詳情請參見自適應Serverless計算。
“大任務”自動重跑
如果SQL已經使用本執行個體資源執行,為進一步提升系統穩定性,避免正在啟動並執行SQL佔用系統過多資源,支援定義“執行時間長度超過x秒”或“出現OOM”的SQL為“大查詢”,並自動使用Serverless資源重跑該部分SQL。詳情請參見大查詢控制。
設定Serverless Computing任務的優先順序
Hologres支援為進入Serverless Computing的SQL設定優先權。通過設定單條SQL可使用的資源量上限與按優先順序的排隊機制,保障進入Serverless Computing的SQL穩定有序執行。
以如下情境為例:
您的執行個體規格為32 cores,執行個體可使用的Serverless Computing資源上限為96 cores。有SQL A正在使用Serverless的64 cores資源運行中。同時,Serverless任務隊列中有SQL B(需要申請48 cores資源,優先順序5)、SQL C(需要申請32 cores資源,優先順序3)。此時,系統會等待SQL A執行完成後優先申請48 cores資源用於執行SQL B,而非先使用剩餘的32 cores資源來執行SQL C。
-
您可以執行如下代碼,設定Serverless Computing資源中SQL執行的優先順序。
優先順序範圍為 [1, 5],預設值為3。數值越大,優先順序越高,越優先分配資源(和分配資源數量無關)。
-- Session層級配置 SET hg_experimental_serverless_computing_query_priority = 5; -- 重設配置 RESET hg_experimental_serverless_computing_query_priority; -- User層級配置 ALTER USER "<role_name>" IN DATABASE <db_name> SET hg_experimental_serverless_computing_query_priority = 5; -- 重設配置 ALTER USER "<role_name>" IN DATABASE <db_name> RESET hg_experimental_serverless_computing_query_priority; -
使用樣本
-- 使用Serverless Computing資源執行 SQL. SET hg_computing_resource = 'serverless'; -- 設定該SQL的優先順序是5 SET hg_experimental_serverless_computing_query_priority to 5; -- 執行SQL INSERT INTO sink_tbl SELECT * FROM source_tbl; -- 重設配置 RESET hg_computing_resource; RESET hg_experimental_serverless_computing_query_priority;
Serverless Computing驗證
您可以執行以下代碼,查看上述SQL執行計畫。
-- 使用Serverless Computing資源執行SQL
SET hg_computing_resource = 'serverless';
-- 執行SQL
EXPLAIN INSERT INTO sink_tbl SELECT * FROM source_tbl;
-- 重設配置
RESET hg_computing_resource;
返回結果如下。返回結果中出現Computing Resource: Serverless,表示該SQL使用Serverless Computing資源執行。
QUERY PLAN
------------------------------------------------------------------------------------------
Gather (cost=0.00..5.18 rows=100 width=4)
-> Insert (cost=0.00..5.18 rows=100 width=4)
-> Redistribution (cost=0.00..5.10 rows=100 width=4)
-> Local Gather (cost=0.00..5.10 rows=100 width=4)
-> Decode (cost=0.00..5.10 rows=100 width=4)
-> Seq Scan on source_tbl (cost=0.00..5.00 rows=100 width=4)
Computing Resource: Serverless
Optimizer: HQO version 2.1.0
(8 rows)
您還可查看 Serverless 資源中正在啟動並執行任務以及歷史任務,詳情請參見Serverless Computing監控與營運。