文档

Serverless Computing(Beta)

更新时间:

Hologres支持Serverless Computing,您可以指定ETL任务在全托管的Serverless Computing资源池进行,无需预留固定规格的计算资源,且各ETL任务还可使用独立的Serverless Computing资源,确保任务之间资源隔离,避免了资源竞争与相互干扰的情况。

说明

Serverless Computing处于免费邀测中,如果您需要开通试用该功能,请提交申请联系技术支持。提交申请后即视为您同意按照《阿里云法律声明及隐私权政策》处理并保障您的信息安全。

背景信息

在未开启Serverless Computing的情况下,执行ETL任务需要预先预留计算资源,这在没有任务运行时会导致资源闲置和浪费。此外,由于ETL任务之间的资源并未实现隔离,ETL任务之间会相互竞争共享资源,从而彼此产生干扰,并可能导致查询性能的不稳定,即查询抖动现象。开启Serverless Computing后,ETL任务可在Serverless Computing资源池进行,并避免了资源争抢和资源浪费,开启Serverless Computing的架构介绍如下图所示。

image

计费说明

Serverless Computing资源是按照ETL任务的实际资源消耗和运行时间按量付费。

重要

目前Serverless Computing处于免费邀测中,具体收费时间和价格会在收费前1个月通知。

实例计算资源和Serverless Computing资源Quota的对应关系如下表所示。

实例计算资源(CU)

Serverless Computing资源Quota

实例计算资源<32

不支持使用Serverless Computing。

32=<实例计算资源<688

Serverless Computing资源Quota为实例计算资源的3倍。例如32CU的实例,可用的Serverless Computing资源Quota=32*3=96 CU。

实例计算资源>=688

支持最高达到2048CU的资源配额。

注意事项

  • 需满足以下所有条件,才支持使用Serverless Computing:

    • 实例类型为:通用型计算组型

    • 地域和可用区:华东1(杭州)的可用区J、 华南1(深圳)的可用区F、华东2(上海)的可用区E。

    • 实例版本为:Hologres V2.1.17及以上版本。

      说明

      如果您的实例是V2.1.17以下版本,请您使用实例升级或加入实时数仓Hologres交流群申请升级实例,详情请参见如何获取更多的在线支持?

  • 以下情况不支持使用Serverless Computing:

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

    • 使用Fixed Plan的SQL。

    • 加密表(包括内表和外表)。

  • 如果需要使用EXTENSION,现在仅支持如下EXTENSION:

    • ClickHouse

    • Flow Analysis

    • PostGIS

    • RoaringBitmap

    • BSI

    • Proxim

  • 仅INSERT(不包括INSERT OVERWRITE)、INSERT ON CONFLICT(UPSERT)、DELETE和UPDATE的DML操作支持使用Serverless Computing。

开启Serverless Computing

新购实例

访问Hologres实例列表,单击新增引擎实例,在实例购买页面,设置开启Serverless Computing参数为。关于新购实例详情,请参见购买Hologres

image

存量实例

访问Hologres实例列表,在顶部菜单栏左侧选择地域,选择目标实例,单击操作列中的升配,在变配页面,设置开启Serverless Computing参数选为

说明

升配期间无法对实例进行任何操作,请尽量在业务低峰期执行变配操作,建议应用具备重连机制。升配计算资源配置涉及计算资源重新分配,元数据变更等操作,通常需要2~5分钟,请您耐心等待。

image

关闭Serverless Computing

您可以访问Hologres实例列表,在顶部菜单栏左侧选择地域,选择目标实例,单击操作列中的升配,在变配页面,设置开启Serverless Computing参数选为

image

说明

Serverless Computing关闭后,不支持指定Serverless Computing资源,当前Serverless Computing资源中运行和排队的任务都会失败。

使用Serverless Computing资源执行SQL

  • 您可以通过执行如下代码,使用Serverless Computing资源执行SQL命令,推荐SESSION级别设置。

    -- 使用Serverless Computing资源执行SQL,默认值为local,表示使用本实例资源执行SQL。
    SET hg_computing_resource = 'serverless';
    
    --提交DML后重置配置,保证非必要的SQL不会使用serverless资源。
    reset hg_computing_resource;
  • 使用示例

    --数据准备--
    -- 创建源表
    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--
    SET hg_computing_resource = 'serverless';
    --执行SQL
    INSERT INTO sink_tbl SELECT * FROM source_tbl;
    -- 重置配置
    reset hg_computing_resource;

    您可以执行以下代码,查看上述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:表示使用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 Computing资源上限

  • 您可以执行如下代码,设置每条SQL被分配的Serverless Computing资源上限,推荐DB级别设置。

    -- 配置单个Serverless Computing分配的最大CU,默认为512。
    SET hg_experimental_serverless_computing_max_cores = 512;
    
    -- 重置配置
    reset hg_experimental_serverless_computing_max_cores;
  • 使用示例

    -- 使用Serverless Computing资源执行SQL
    SET hg_computing_resource = 'serverless';
    
    -- 设置单条SQL最多使用32CU执行
    SET hg_experimental_serverless_computing_max_cores = 32;
    
    -- 执行SQL
    INSERT INTO sink_tbl SELECT * FROM source_tbl;
    
    -- 重置配置
    reset hg_computing_resource;
    reset hg_experimental_serverless_computing_max_cores;

设置Serverless Computing资源分配

如果您希望某条SQL能够分配更多的Serverless Computing资源,以提高执行效率,您可以设置SQL的Serverless Computing资源分配。

  • 您可以执行如下代码,设置单个SQL语句在执行时所分配的Serverless Computing资源。

    -- 默认为0,表示该Serverless Computing的计算资源由系统自动估算
    SET hg_experimental_serverless_computing_required_cores = XX;
    
    -- 重置配置
    reset hg_experimental_serverless_computing_required_cores;
  • 使用示例

    --使用Serverless Computing资源执行SQL
    SET hg_computing_resource = 'serverless';
    
    --Serverless Computing的计算资源不由系统估算,申请96CU的计算资源
    SET hg_experimental_serverless_computing_required_cores = 96;
    
    -- 执行SQL
    INSERT INTO sink_tbl SELECT * FROM source_tbl;
    
    -- 重置配置
    reset hg_computing_resource;
    reset hg_experimental_serverless_computing_required_cores;

设置Serverless Computing资源分配的优先级

  • 您可以执行如下代码,设置Serverless Computing资源中SQL执行的优先级。

    -- 优先级范围为 [1, 5], 数值越大,优先级越高,越优先分配资源(和分配资源数量无关)
    -- 默认优先级为3.
    SET hg_experimental_serverless_computing_query_priority to 5;
    -- 重置配置
    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任务。

    SELECT
        *,
        (running_info::json) ->> 'computing_resource' AS computing_resource,
        (running_info::json) ->> 'current_stage' AS current_stage
    FROM
        hg_stat_activity
    WHERE (running_info::json) ->> 'computing_resource' = 'Serverless'
        AND (running_info::json) -> 'current_stage'->>'stage_name' = 'EXECUTE'
  • 查看Serverless Computing资源中排队的SQL任务。

    SELECT
        *,
        (running_info::json) ->> 'computing_resource' AS computing_resource,
        (running_info::json) ->> 'current_stage' AS current_stage
    FROM
        hg_stat_activity
    WHERE (running_info::json) ->> 'computing_resource' = 'Serverless'
        AND (running_info::json) -> 'current_stage'->>'stage_name' = 'QUEUE'
  • 查看Serverless Computing资源中SQL任务的运行状态。

    SELECT
        *,
        (running_info::json) ->> 'computing_resource' AS computing_resource,
        (running_info::json) ->> 'current_stage' AS current_stage
    FROM
        hg_stat_activity
    WHERE 
        query_id = '<query_id>';

查询历史的Serverless Computing任务

  • 在慢Query日志中查看在Serverless Computing资源中执行的历史任务。

    SELECT
        *,
        extended_cost::json ->> 'queue_time_ms' AS queue_time_ms,--Serverless Computing资源中SQL等待排队时长。
        extended_cost::json ->> 'serverless_allocated_cores' AS serverless_allocated_cores,--Serverless Computing资源分配给当前SQL的CU数。
        extended_cost::json ->> 'serverless_allocated_workers' AS serverless_allocated_workers,--Serverless Computing资源分配给当前SQL的Worker数。
        extended_cost::json ->> 'serverless_resource_used_time_ms' AS serverless_resource_used_time_ms--当前SQL实际占用Serverless Computing资源的时长。
    FROM
        hologres.hg_query_log
    WHERE
        query_extinfo @> ARRAY['serverless_computing'::text];
  • hologres.hg_serverless_computing_query_log视图中查看在Serverless Computing资源中执行的历史任务。

    SELECT
        *
    FROM
        hologres.hg_serverless_computing_query_log;
    说明

    自2.1.18版本开始,为了方便查询,将慢query日志中Serverless Computing任务相关内容固化为列,并且新增了hologres hg_serverless_computing_query_log视图。相对于慢Query日志hologres.hg_serverless_computing_query_log视图中新增以下字段:

    • queue_time_ms:Serverless Computing资源中SQL等待排队时长,单位毫秒(ms)。

    • serverless_allocated_cores:Serverless Computing资源实际分配给当前SQL的CU数。

    • serverless_allocated_workers:Serverless Computing资源实际分配给当前SQL的Worker数。

    • serverless_resource_used_time_ms:当前SQL实际占用Serverless Computing资源的时长,单位毫秒(ms)。

  • 本页导读 (1)
文档反馈