本文为您介绍Hologres共享集群(湖仓加速版)实例的计费情况。

计费模式

Hologres共享集群(湖仓加速版)支持以Serverless方式加速查询存储于MaxCompute的仓内数据和OSS的湖数据,以及湖仓数据联邦分析。计费方式与原共享集群(MaxCompute BI 加速版)相同,即每执行一次SQL查询作业,Hologres将根据作业输入的数据量进行计费。

查询作业的计费公式为:
一次查询作业费用=查询输入数据量×单价
说明
  • Hologres共享集群(湖仓加速版)服务使用单独的计算资源。
  • Hologres共享集群(湖仓加速版)按照每条查询作业扫描的数据量(每条查询至少 10 MB,即若由于存在查询启动开销,即使原始扫描数据量未满 10 MB,也需要按照 10 MB 计算)计费。
  • 账单每小时推送一次,每次推送两个小时前的账单数据。
  • 不查询不产生任何费用。
  • 查询分区表时,您可以应用分区过滤条件,减少数据扫描量并提升查询性能。

产品定价

说明 自2023年3月8日起,共享集群(湖仓加速版)助力您降本增效,所有查询享受5折优惠,优惠截止日期为2024年3月1日。
价格信息如下。
计费方式地域价格活动价格单位
按SQL扫描的数据量付费华北2(北京)0.066705 0.0333525美元/GB
华东2(上海)0.066705 0.0333525美元/GB
华东1(杭州)0.066705 0.0333525美元/GB
华南1(深圳)0.066705 0.0333525美元/GB
新加坡0.084049 0.0420245美元/GB

生命周期管理

Hologres共享集群(湖仓加速版)根据SQL扫描的数据量进行收费,采用根据使用量的后付费模式。该模式下的实例周期管理流程如下:
  • 在阿里云官网购买一个Hologres共享集群(湖仓加速版)实例,开通成功后即可运行该实例,系统将会汇总前一天内所有SQL对应的数据,推送账单并从您的账户中自动扣除费用。
  • 阿里云账号欠费后,该账号下所有实例将会变成欠费状态。若账号累计欠费小于1000美元,实例正常运行。
  • 账号累计欠费达到1000美元时扣款,扣款失败后的14天内,该实例正常运行。
  • 实例扣款失败后的第15天,实例停服,处于锁定状态,无法被访问。在此期间将不会推送账单。
  • 账号欠费停服后的第15天,实例将会被释放,系统将会从管控台将实例删除,实例相关的数据也会被清除且不能再恢复。

Query明细查询

使用SuperUser可以查看所有用户的Query明细信息,RAM用户可以查看自己运行的SQL相关信息。查询语句如下:
select usename,status,query_id,command_tag,duration,query,read_bytes,application_name FROM hologres.hg_query_log;
更多Query信息请参见Query管理

查询扫描量

权限说明

查询扫描量需要有一定的权限,其权限规则和授权方式说明如下:
  • 查询实例所有DB的数据扫描量。
    • 授予用户Superuser权限。
      Superuser账号可以查看实例所有DB的数据扫描量,授权命令如下:
      --将“云账号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命令核对明细数据,执行此命令的账号需要具有实例的Superuser角色。
重要 如果实例设置过log_min_duration_statement参数,将只能查询到SQL执行时间大于等于log_min_duration_statement参数值的计费明细。log_min_duration_statement参数详细说明请参见慢Query日志查看与分析的配置项说明,使用如下语句查看log_min_duration_statement参数的设置情况。
show log_min_duration_statement;
  • 语法示例
    select  to_char(query_end,'DD Mon YYYY') as day
            ,round(
                sum(
                    case when read_bytes < 10*1024*1024 then 10*1024*1024
                    else read_bytes end
                )/1024/1024
            ) as "scan_size_mb" -- 每条查询至少10MB
            ,count(*) as "sql_count"
    from    hologres.hg_query_log
    where   status = 'SUCCESS'
    and     command_tag in ('SELECT')
    and     read_bytes is not null
    and     query_end >= '开始时间'::TIMESTAMPTZ
    and     query_end < '结束时间'::TIMESTAMPTZ
    group by 1
    order by 3 desc;
  • 使用示例

    例如查询2022年1月1日10:00至2022年1月1日11:00的扫描数据量的示例如下。

    select to_char(query_end,'DD Mon YYYY') as day
            ,round(
                sum(
                    case when read_bytes < 10*1024*1024 then 10*1024*1024
                    else read_bytes end
                )/1024/1024
            ) as "scan_size_mb" -- 每条查询至少10MB
            ,count(*) as "sql_count"
    from    hologres.hg_query_log
    where   status = 'SUCCESS'
    and     command_tag in ('SELECT')
    and     read_bytes is not null
    and     query_end >= '2022-01-01 10:00:00+08'::TIMESTAMPTZ
    and     query_end < '2022-01-01 11:00:00+08'::TIMESTAMPTZ
    group by 1
    order by 3 desc;

查询一段时间的每条SQL扫描数据量

您可以使用如下SQL命令核对查询一段时间内每条SQL扫描数据量,执行此命令的账号需要具有实例的Superuser角色。
  • 语法示例
    select  usename
            ,status
            ,query_id
            ,datname
            ,command_tag
            ,duration
            ,message
            ,query_start
            ,query_end
            ,query_date
            ,query
            ,case when read_bytes < 10*1024*1024 then 10*1024*1024
             else read_bytes end as billing_read_bytes -- 每条查询至少10MB
            ,application_name
    from    hologres.hg_query_log
    where   status = 'SUCCESS'
    and     command_tag in ('SELECT')
    and     read_bytes is not null
    and     query_end >= '开始时间'::TIMESTAMPTZ
    and     query_end < '结束时间'::TIMESTAMPTZ;
                                    
    billing_read_bytes字段即为用于计费的扫描数据量。
  • 使用示例
    例如查询2022年3月1日10:00至2022年3月1日11:00每条SQL扫描数据量的示例如下。
    select  usename
            ,status
            ,query_id
            ,datname
            ,command_tag
            ,duration
            ,message
            ,query_start
            ,query_end
            ,query_date
            ,query
            ,case when read_bytes < 10*1024*1024 then 10*1024*1024
             else read_bytes end as billing_read_bytes -- 每条查询至少10MB
            ,application_name
    from    hologres.hg_query_log
    where   status = 'SUCCESS'
    and     command_tag in ('SELECT')
    and     read_bytes is not null
    and     query_end >= '2022-03-01 10:00:00+08'::TIMESTAMPTZ
    and     query_end < '2022-03-01 11:00:00+08'::TIMESTAMPTZ;