Hologres的Serverless Computing功能是按照大SQL作业(例如CPU或内存开销大的SQL作业)实际消耗的Serverless Computing计算资源和使用时长进行计费,本文为您介绍如何查看Serverless Computing计算资源的消耗量以及计费详情。
计费说明
Serverless Computing功能,针对每个SQL作业,按照使用的CU*H(实际使用的资源量 * 资源使用时长)统计资源用量。按小时结算,即每小时汇总上一小时使用Serverless Computing执行的SQL作业用量,扣费(结算)一次。具体资源单价请参见计费说明。
Serverless Computing已于北京时间
2024年07月01日起正式收费,请参考下文,关注您的Serverless Computing资源消耗量,并估算账单。如有需要,请进一步调整作业的资源分配,避免产生预期外的费用。Serverless Computing计算资源费用暂不支持计算抵扣包。
目前Serverless Computing支持的地域及可用区请参见Serverless Computing使用指南。
hologres.hg_query_log和hologres.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。
Hologres每10min汇总并更新当前实例的Serverless Computing资源总用量,因此该限制可能存在10min延时。
执行SQL前,Hologres会对比“实例今日Serverless已用资源量”和“当前用户/DB的Serverless可用资源量限制”。如果已达限制,则该SQL默认自动转由本实例计算资源执行。如果未达限制,则该SQL会正常使用Serverless资源执行。
Hologres按当前DB默认时区的自然日统计Serverless Computing已用资源量。可在同一个Session内执行如下语句查询当前DB默认时区。
-- RESET时区,以避免受当前客户端时区、当前用户默认时区影响 RESET timezone; -- 查询当前DB的默认时区 SHOW timezone;
使用建议
如果您长期使用Hologres Serverless Computing功能,可以通过查询指定时间内的资源消耗量判断合适的日累计用量上限。
如果您未使用过Hologres Serverless Computing功能,则建议充分使用、生产稳定后,再根据使用情况判断是否设置日累计用量限制及合适的上限。
如果您不希望SQL在Serverless 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。
成本分析
您可通过费用与成本的模块,对Hologres的Serverless Computing计算资源计费项进行费用监控与分析。
登录费用与成本,在左侧导航栏单击。
在成本分析的成本趋势页签,选择分类维度为计费项,并根据实际情况选择成本类型、时间粒度。
在页面右侧的筛选条件区域,选择计费项为Serverless Computing计算资源,实时数仓Hologres独享实例(按量付费),并单击应用筛选条件,即可查看对应时间范围内的Serverless Computing成本情况。

更多信息请参见成本分析。
消费告警
您可通过阿里云的费用与成本,对部分地域、部分商品的后付费消费项进行预算管理并设置告警,详情请参见费用预警。
单条SQL执行时长告警
Hologres现已支持对Serverless Computing运行指标进行监控,推荐您根据业务场景对Serverless Computing创建告警规则,以避免Serverless Computing产生预期外的费用。
例如对于监控指标正在运行的Serverless Computing的查询中,最长的时长,推荐的告警规则如下:
警告(Warn):“正在运行的Serverless Computing的查询中,最长的时长连续5个周期(1周期=1分钟),监控值>=3600000milliseconds”。

详情请参见监控告警实践。
相关文档
Serverless Computing功能的介绍详情,请参见Serverless Computing。
Serverless Computing功能的使用详情,请参见Serverless Computing使用指南。