使用Serverless Computing执行读写任务

HologresV2.1.17版本起支持Serverless Computing功能。本文为您介绍如何使用HologresServerless Computing功能执行任务。

Serverless Computing支持的功能范围

Serverless Computing支持的任务类型如下:

  • V2.1.17版本起,支持主要的DML任务,包括INSERT(不含INSERT OVERWRITE)、INSERT ON CONFLICT(UPSERT)、DELETEUPDATE。

  • 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),支持存储过程中的DMLDQL。

  • 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任务

Serverless Computing支持的函数Extension扩展如下:

  • ClickHouse

  • Flow Analysis

  • PostGIS

  • RoaringBitmap

  • BSI

  • Proxima

如下情况不支持Serverless Computing:

  • 只读从实例的查询(主实例、计算组实例可正常使用)。

  • 开启了多行DML事务的查询,如set hg_experimental_enable_transaction = on

  • 使用Fixed PlanSQL。

  • DLF外表查询与写入。

  • 跨库查询与写入。

使用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)。

  • 高优先级的数据大屏,可对大屏对应数据源中的账号进行配置。

您可以执行如下代码,针对某一USERROLE,使其发起的全部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 ComputingSQL设置优先级。通过设置单条SQL可使用的资源量上限与按优先级的排队机制,保障进入Serverless ComputingSQL稳定有序执行。

以如下场景为例:

您的实例规格为32 cores,实例可使用的Serverless Computing资源上限为96 cores。有SQL A正在使用Serverless64 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监控与运维