全部产品
Search
文档中心

云原生大数据计算服务 MaxCompute:消费控制

更新时间:Jul 24, 2025

本文为您介绍如何对按量计费的计算任务的消费进行限制。

功能介绍

MaxCompute按量计费资源为弹性伸缩资源,按需求为计算任务提供资源,对资源使用无限制。因此,您需要监控计算任务的消费情况,以免超出预期。MaxCompute提供如下消费监控告警方式:

消费监控告警方式

消费限制措施

描述

单SQL消费限制

限制资源消耗

MaxCompute支持在执行SQL语句前预估SQL语句的资源消费。当预估资源消费超出设定的阈值时,SQL语句执行受限,系统返回失败状态并给出失败信息。您可以通过此功能预防单个SQL语句产生高额费用。

日累计SQL消费限制

费用预警

监控Project中标准SQL的日累计消费。如果当日Project中标准SQL已产生的累计消费与新发起的标准SQL预估消费总和超过设定的阈值,新发起的标准SQL执行受限,系统返回失败状态并给出失败信息。您可以通过此功能阻止标准SQL日累计消费超出预期。

说明

日累计SQL消费是指单纯的计量消费,未出账,不含任何优惠及折扣。

单SQL消费限制

设置方式

单SQL消费限制支持如下两种设置方式:

  • Project级别设置

    需要由Project Owner或者拥有Super_Administrator角色的用户执行如下命令开启或撤销单SQL消费限制。

    --开启单SQL消费限制。
    SETPROJECT odps.sql.metering.value.max=<m_value>;
    
    --撤销单SQL消费限制。
    SETPROJECT odps.sql.metering.value.max;

    m_value指单SQL消费的最高阈值,是SQL读取量(GB)×SQL复杂度的值,并非消费金额。

    说明

    Project的单SQL消费受m_value限制。如果某个SQL的预估消费超过m_value,该SQL执行受限。

  • Session级别设置

    将如下命令和SQL语句一起提交执行即可开启单SQL消费限制,SQL语句前不添加该命令则表示撤销单SQL消费限制。只对本次执行有效。

    SET odps.sql.metering.value.max=<m_value>;

设置建议

在实际操作中,建议您:

  • 根据项目中历史SQL消费以及您的预期消费设定Project级别的m_value

    • 您可下载每天的详细计量信息,以Project为粒度,计算SQL任务(数据分类为ComputationSql的任务)的资源消耗量(即SQL读取量(GB)×SQL复杂度),并根据每日正常消耗的最高值,结合业务波动确定一个合适的值。

    • 您还可以将计算消耗换算成费用,再结合业务情况,确定一个合适的金额后换算成消耗量。

  • 先设置Project级别的消费限制,然后针对某些特殊的SQL单独设置Session级别的m_value限制。

    说明
    • 设置Session级别的消费限制前,请您务必确认相应的SQL确实需要Session级别的限制,避免滥用该功能。

    • 如果同时设置Project级别和Session级别的消费限制,则Session级别优先级高于Project级别。

      例如:Project级别设置m_value为100,而Project中某个SQL设置了Session级别的m_value为200,则该SQL执行前预估消费超过100不受限,超过200会受限。其他没有单独设置Session级别限制的SQL语句,会遵从Project级别的限制,预估消费超过100就会受限。

  • 无论是设置Project级别还是Session级别的消费限制,都会影响任务的执行,建议您结合任务失败告警功能(例如DataWorks的智能监控)使用,及时感知任务失败并进行人工干预处理,以免关键任务被限制后影响业务。

日累计SQL消费限制

设置方式

Project日累计SQL消费限制通过如下命令进行设置。仅Project Owner或者拥有Super_Administrator角色的用户可以执行该命令。

SETPROJECT odps.costcontrol.rule={"byDate":{"sql":<Limit>}};
  • byDate:日累计。以东八区时间为准,计算当日00:00:00~23:59:59期间的累计消费,第二天重新累计消费。

  • Limit:Project标准SQL的日累计金额消费阈值,单位:美元。此处统计的消费不含任何优惠和折扣。

    说明

    单SQL消费=扫描数据量(GB)×复杂度×0.0438,沙特(利雅得)地域由合作伙伴运营,SQL标准计费的单价为0.05256 USD/GB。

注意事项

通过上述命令设置后,需注意以下规则:

规则类型

系统行为

示例与告警建议

首次设置

累计Project中标准SQL的当日总消费,并预估新发起的标准SQL消费。

示例:首次在Project级别设置SETPROJECT odps.costcontrol.rule={"byDate":{"sql":100}};,系统开始当日累计,预估新任务消耗。

非首次设置(修改已有值)

新消费预估基于已累计值和新设置的限值进行校验,以确定是否限制;累计值不重置。

若原日累计SQL消费限制为100,当日已累计消费为99,将限值修改为150后,再发起新的标准SQL。

此时系统会先预估该SQL的费用(假如预估为20),若该SQL的预估消费与已累计消费之和(20+99)小于或等于150,则该SQL可正常执行,否则将触发拦截。

当日累计消费和预估消费总和大于Limit

新发起的标准SQL任务被拦截,不能执行,同时返回报错信息。

  • 报错示例:

    执行setproject odps.costcontrol.rule={"byDate":{"sql":100}};命令设置消费限制,当Project中的标准SQL日累计消费超出限制时,任务执行报错如下:

    Exceed Cost Limit : 
    {"AlreadyCost":"100.1","InstanceId":"xxx","Limit":"100","Project":"xxx","TaskType":"SQL","ThisTaskWillCost":"0","TimeWindow":"BYDATE"}
  • 建议:

    结合任务失败告警功能(例如DataWorks的智能监控)使用,及时感知任务失败并进行人工干预处理,以免关键任务被限制后影响业务。