全部產品
Search
文件中心

MaxCompute:消費控制

更新時間:Jul 25, 2025

本文為您介紹如何對隨用隨付的計算任務的消費進行限制。

功能介紹

MaxCompute隨用隨付資源為Auto Scaling資源,按需求為計算任務提供資源,對資源使用無限制。因此,您需要監控計算任務的消費情況,以免超出預期。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的智能監控)使用,及時感知任務失敗並進行人工幹預先處理,以免關鍵任務被限制後影響業務。