全部產品
Search
文件中心

Hologres:使用Serverless Computing執行讀寫任務

更新時間:Nov 14, 2025

Hologres自V2.1.17版本起支援Serverless Computing功能。本文為您介紹如何使用Hologres的Serverless Computing功能執行任務。

Serverless Computing支援的功能範圍

Serverless Computing支援的任務類型如下:

  • V2.1.17版本起,支援主要的DML任務,包括INSERT(不含INSERT OVERWRITE)、INSERT ON CONFLICT(UPSERT)、DELETE和UPDATE。

  • V2.2.14版本起,支援DQL任務。

  • V3.0.1版本起,支援DML中的COPY任務。

  • V3.0.9版本起,支援DML中的CREATE TABLE AS(CTAS)任務。

  • V2.2.42/V3.0.19版本起,支援RESHARDING任務。

  • V3.0.26版本起,支援DML中的INSERT OVERWRITE任務(預存程序hg_insert_overwrite),支援預存程序中的DML和DQL。

  • V3.1.0版本起,支援DML中的原生INSERT OVERWRITE文法,支援REBUILD任務。

  • V3.1.3版本起,支援讀寫加密表(含Hologres加密內表及MaxCompute加密外表),需開啟GUC參數hg_serverless_computing_enable_encrypted_table,詳情請參見資料加密

  • V3.1.11版本起,支援Compaction任務,詳情請參見使用Serverless Computing執行Compaction任務

  • V4.0版本起,支援讀寫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資源中,按優先順序由高到低生效:

  1. SQL層級(Session層級):設定hg_computing_resource參數為'serverless',當前串連的讀寫請求將使用Serverless資源執行。

  2. 使用者層級:使用者層級設定hg_computing_resource參數為'serverless',使用Serverless資源執行。

  3. 查詢隊列Query Queue層級:設定查詢隊列中的全部任務均使用Serverless資源執行。

  4. 自適應Serverless計算:開啟後,系統自動判斷“大任務”,自動使用Serverless資源執行。

  5. 不符合上述條件,則使用本執行個體資源執行。

SQL執行中,也支援配置大查詢自動使用Serverless資源重跑,以減輕實際生產業務的負載壓力、降低OOM頻率,並提升系統穩定性。

說明

使用Serverless資源執行SQL期間,計算資源由當前SQL獨享,不會同時執行其他SQL。

SQL層級配置

該方式常用於如下情境:

  • 一次性的匯入或查詢任務,如歷史資料重新整理、表結構/屬性修改(Rebuild)等。

  • 周期性的離線匯入任務,如M+1、T+1、H+1的離線資料匯入匯出,可在調度任務中增加該配置。

  • 其他所有需要靈活使用Serverless資源的情境。

您可以通過執行如下代碼,使用Serverless Computing資源執行SQL命令,推薦SESSION層級設定。

-- 使用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監控與營運