Serverless Computing资源用量与计费

HologresServerless Computing功能是按照大SQL作业(例如CPU或内存开销大的SQL作业)实际消耗的Serverless Computing计算资源和使用时长进行计费,本文为您介绍如何查看Serverless Computing计算资源的消耗量以及计费详情。

计费说明

Serverless Computing功能,针对每个SQL作业,按照使用的CU*H(实际使用的资源量 * 资源使用时长)统计资源用量。按小时结算,即每小时汇总上一小时使用Serverless Computing执行的SQL作业用量,扣费(结算)一次。具体资源单价请参见计费说明

重要
  • Serverless Computing已于北京时间20240701起正式收费,请参考下文,关注您的Serverless Computing资源消耗量,并估算账单。如有需要,请进一步调整作业的资源分配,避免产生预期外的费用。

  • Serverless Computing计算资源费用暂不支持计算抵扣包。

  • 目前Serverless Computing支持的地域及可用区请参见Serverless Computing使用指南

  • hologres.hg_query_loghologres.hg_serverless_computing_query_log均保留近30天的数据。

仅执行成功的SQL作业计费,执行失败不计费。

查询资源消耗量

Hologres V2.1.18版本起,可以通过查询hologres.hg_serverless_computing_query_log视图计算Serverless Computing任务的资源消耗量,并根据Serverless资源的计费公式,估算费用。关于慢Query日志详情,请参见Query日志查看与分析

说明
  • Hologres V2.2.7版本之前,慢Query日志只记录执行时长超过100毫秒的Serverless Computing成功任务以及所有失败任务。而在Hologres V2.2.7及以上版本,支持查看所有Serverless Computing任务。

  • Query日志记录的是每条SQL的资源消耗数据,在账单生成的过程中,可能需要进行数据聚合、单位换算等处理,因此可能会有少量差异。

权限说明

根据慢Query日志估算Serverless Computing的消耗资源量与账单需要有一定的权限,其权限规则和授权方式说明如下。

  • 查询实例所有DB的数据扫描量

    • 方式一:需要授予Superuser权限,授权命令如下:

      --将“云账号ID”替换为实际用户名。如果是RAM用户,账号ID前需要添加“p4_”。
      ALTER USER "云账号ID" SUPERUSER;
    • 方式二:将用户添加到pg_read_all_stats用户组,授权命令如下:

      说明

      除了Superuser权限,Hologres还支持pg_read_all_stats用户组查看所有DB的数据扫描量。如果普通用户需要查看全部日志,可联系Superuser进行授权并加入该用户组。

      GRANT pg_read_all_stats TO "云账号ID";--专家权限模型授权
      CALL spm_grant('pg_read_all_stats', '云账号ID');  -- SPM权限模型
      CALL slpm_grant('pg_read_all_stats', '云账号ID'); -- SLPM权限模型
  • 查看当前DB的数据扫描量

    • 开启简单权限模型(SPM)或基于Schema级别的简单权限模型(SLPM),并将用户加入db_admin用户组,db_admin角色可以查看当前DB的数据扫描量,授权命令如下:

      CALL spm_grant('<db_name>_admin', '云账号ID');  -- SPM权限模型
      CALL slpm_grant('<db_name>.admin', '云账号ID'); -- SLPM权限模型
    • 普通用户支持查询当前账号对应DB下自己执行的数据扫描量。

说明

更多权限操作请参见权限管理概述

查询单条SQL的资源消耗量

您可以使用如下SQL命令查询Serverless Computing任务的资源消耗量明细。

SELECT
    *,
    queue_time_ms,	-- Serverless Computing资源中SQL等待排队时长,单位毫秒(ms)
    serverless_allocated_cores,	-- Serverless Computing资源实际分配给当前SQL的CU数。
    serverless_resource_used_time_ms, -- SQL实际占用Serverless Computing资源的时长,单位毫秒(ms)
    (serverless_allocated_cores::DECIMAL(38, 4)) * (serverless_resource_used_time_ms::DECIMAL(38, 4)) AS serverless_cums
FROM
    hologres.hg_serverless_computing_query_log;

查询指定时间内的资源消耗量

您可以使用如下SQL命令查询指定时间内Serverless Computing执行成功的任务资源消耗量。

SELECT
    (SUM((serverless_allocated_cores::DECIMAL(38, 4)) * (serverless_resource_used_time_ms::DECIMAL(38, 4))) / 1000 / 60 / 60)::bigint AS serverless_cuh
FROM
    hologres.hg_serverless_computing_query_log
WHERE
    status = 'SUCCESS'
    AND serverless_allocated_cores IS NOT NULL
    AND serverless_resource_used_time_ms IS NOT NULL
    AND query_end BETWEEN '2024-05-01 00:00:00' AND '2024-05-31 24:00:00';-- 指定时间段

预估资源消耗量

若您尚未开通Serverless Computing,但希望通过Serverless资源执行某些SQL语句,您可以先利用Hologres实例资源来执行。Hologres系统表hologres.hg_query_log中记录了cpu_time_ms字段,您可以通过该字段查询执行SQL任务所消耗的CPU时间,然后通过cpu_time_ms / 1000 / 60 / 60粗略估算使用Serverless资源执行该SQL语句的资源消耗量。查询cpu_time_ms信息的SQL命令如下:

SELECT cpu_time_ms FROM hologres.hg_query_log WHERE query_id = 'xxx';
说明

由于本实例资源可能受到其他负载影响,而Serverless资源不受其他负载影响,并且二者资源量可能有差异,因此该方法无法精确预估Serverless的资源消耗量。建议选择部分重点SQL任务,Serverless Computing使用指南,直接使用Serverless资源进行实际资源消耗量的测试,测试过程对本实例其他任务无影响。

消费监控与告警

日累计用量限制

Hologres V3.1.5版本起,支持通过如下SQL限制每日可使用的Serverless Computing资源量。该限制仅支持Superuser设置。

-- 对DB设置上限
ALTER DATABASE <db_name> SET hg_serverless_computing_daily_max_cuh_usage_threshold = xx;

-- 对User设置上限
ALTER USER <user_name> SET hg_serverless_computing_daily_max_cuh_usage_threshold = xx;
  • 限制说明

    • 默认值为-1,即不设限制。

    • 单位为CUH。

    • Hologres10min汇总并更新当前实例的Serverless Computing资源总用量,因此该限制可能存在10min延时。

    • 执行SQL前,Hologres会对比“实例今日Serverless已用资源量”和“当前用户/DBServerless可用资源量限制”。如果已达限制,则该SQL默认自动转由本实例计算资源执行。如果未达限制,则该SQL会正常使用Serverless资源执行。

    • Hologres按当前DB默认时区的自然日统计Serverless Computing已用资源量。可在同一个Session内执行如下语句查询当前DB默认时区。

      -- RESET时区,以避免受当前客户端时区、当前用户默认时区影响
      RESET timezone;
      
      -- 查询当前DB的默认时区
      SHOW timezone;
  • 使用建议

    • 如果您长期使用Hologres Serverless Computing功能,可以通过查询指定时间内的资源消耗量判断合适的日累计用量上限。

    • 如果您未使用过Hologres Serverless Computing功能,则建议充分使用、生产稳定后,再根据使用情况判断是否设置日累计用量限制及合适的上限。

如果您不希望SQLServerless Computing资源用量达到限制时自动转由本实例计算资源执行,可以通过执行如下命令,使部分查询直接报错。该参数仅支持Superuser设置。

-- DB级别设置
ALTER DATABASE <db_name> SET hg_serverless_computing_enable_fallback_when_exceed_cuh_threshold = false;

-- User级别设置
ALTER USER <user_name> SET hg_serverless_computing_enable_fallback_when_exceed_cuh_threshold = false;
说明
  • 默认值为true,超限制时SQL自动转由本实例资源执行。

  • 可设为false,即超限制时SQL直接报错serverless computing is not available due to exceeding cuh usage threshold, please adjust the threshold or trun off serverless computing for current query

成本分析

您可通过费用与成本的全部菜单项 > 成本管理 > 成本分析模块,对HologresServerless Computing计算资源计费项进行费用监控与分析。

  1. 登录费用与成本,在左侧导航栏单击全部菜单项 > 成本管理 > 成本分析

  2. 在成本分析的成本趋势页签,选择分类维度计费项,并根据实际情况选择成本类型时间粒度

  3. 在页面右侧的筛选条件区域,选择计费项Serverless Computing计算资源,实时数仓Hologres独享实例(按量付费),并单击应用筛选条件,即可查看对应时间范围内的Serverless Computing成本情况。

    image

更多信息请参见成本分析

消费告警

您可通过阿里云的费用与成本,对部分地域、部分商品的后付费消费项进行预算管理并设置告警,详情请参见费用预警

单条SQL执行时长告警

Hologres现已支持对Serverless Computing运行指标进行监控,推荐您根据业务场景对Serverless Computing创建告警规则,以避免Serverless Computing产生预期外的费用。

例如对于监控指标正在运行的Serverless Computing的查询中,最长的时长,推荐的告警规则如下:

警告(Warn):“正在运行的Serverless Computing的查询中,最长的时长连续5个周期(1周期=1分钟),监控值>=3600000milliseconds”。

jiankong.jpg

详情请参见监控告警实践

相关文档