本文為您介紹如何對隨用隨付的計算任務的消費進行限制。
功能介紹
MaxCompute隨用隨付資源為Auto Scaling資源,按需求為計算任務提供資源,對資源使用無限制。因此,您需要監控計算任務的消費情況,以免超出預期。MaxCompute提供如下消費監控警示方式:
消費監控警示方式 | 消費限制措施 | 描述 |
限制資源消耗 | MaxCompute支援在執行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層級設定 |
非首次設定(修改已有值) | 新消費預估基於已累計值和新設定的限值進行校正,以確定是否限制;累計值不重設。 | 若原日累計SQL消費限制為100,當日已累計消費為99,將限值修改為150後,再發起新的標準SQL。 此時系統會先預估該SQL的費用(假如預估為20),若該SQL的預估消費與已累計消費之和(20+99)小於或等於150,則該SQL可正常執行,否則將觸發攔截。 |
當日累計消費和預估消費總和大於Limit | 新發起的標準SQL任務被攔截,不能執行,同時返回報錯資訊。 |
|