AWS Builder Center: Learn, Build and Connect with builders in the AWS community
AWS Builder Center is the official home for builders on AWS. Share and read what others are working on, follow people who inspire you, explore training and workshops, and find tools to support what you're building.
如何計算 Amazon Redshift Spectrum 查詢費用?
我想計算和最佳化使用 Amazon Redshift Spectrum 查詢 Amazon Simple Storage Service (Amazon S3) 資料時的成本。
簡短說明
先決條件:
- Amazon Redshift 叢集和 S3 儲存貯體位於相同 AWS 區域。
- 連接到您的叢集,以執行 SQL 命令的 SQL 用戶端。
您需要根據 Redshift Spectrum 從 Amazon S3 掃描的位元組數量付費。根據區域不同,您可能會產生額外費用。Redshift Spectrum 會將位元組數量無條件進位到下一個百萬位元組,每次查詢的最小計費單位為 10 MB。如需詳細資訊,請參閱 Amazon Redshift 定價。
**注意:**Redshift Spectrum 不會對管理分區和失敗查詢的資料定義語言 (DDL) 陳述式 CREATE、ALTER 和 DROP TABLE 收費。您的 Amazon Redshift Serverless 運算容量費用包括所有 Amazon S3 外部資料查詢。
解決方法
若要計算估計的查詢成本,並取得在 Redshift Spectrum 中執行的所有 S3 查詢的摘要,請使用 SVL_S3QUERY_SUMMARY 資料表。s3_scanned_bytes 欄會傳回 Redshift Spectrum 從 S3 掃描並傳送到 Redshift Spectrum 層的位元組數。
使用方法
針對 SVL_S3QUERY_SUMMARY 執行以下查詢,以確定 Amazon S3 依 queryID 傳輸的位元組數:
SELECT s3_scanned_bytes FROM SVL_S3QUERY_SUMMARY WHERE query=queryID;
**注意:**將 queryID 替換為您查詢的 ID。
若要確定從 S3 掃描的所有位元組總和,請執行以下查詢:
SELECT sum(s3_scanned_bytes) FROM SVL_S3QUERY_SUMMARY;
您也可以在特定的時間間隔內,查明所有 Redshift Spectrum 查詢所使用位元組數的總和。以下範例說明如何計算從前一天開始執行的查詢所使用的總位元組數:
SELECT sum(s3_scanned_bytes) FROM SVL_S3QUERY_SUMMARY WHERE starttime >= current_date-1;
如果您對美國東部 (維吉尼亞北部) 區域的 S3 儲存貯體執行以下查詢,則 Redshift Spectrum 將依每個 TB 收費。如果在查詢 SVL_S3QUERY_SUMMARY 時 s3_scanned_bytes 的總和傳回 621,900,000,000 位元組,則將位元組轉換為 TB 後,您將獲得 0.565614755032584 TB。
查詢範例:
621900000000 bytes = 621900000000/1024 = 607324218.75 kilobytes 607324218.75 kilobytes = 607324218.75/1024 = 593090.057373046875 megabytes 593090.057373046875 megabytes = 593090.057373046875 /1024 = 579.189509153366089 gigabytes 579.189509153366089 gigabytes = 579.189509153366089/1024 = 0.565614755032584 terabytes
在以下範例中,您的使用量約為 0.5657 TB。若要計算 Redshift Spectrum 使用成本,請乘以每 TB 的費用:
$5 * 0.5657= $2.83
執行以下 SQL 查詢來計算 Redshift Spectrum 的使用費用:
SELECT round(1.0*sum(s3_scanned_bytes/1024/1024/1024/1024),4) s3_scanned_tb, round(1.0*5*sum(s3_scanned_bytes/1024/1024/1024/1024),2) cost_in_usd FROM SVL_S3QUERY_SUMMARY;
上述範例會查詢 Redshift Spectrum 在前一天掃描您 S3 bucket 中資料所產生的費用。
**注意:**所有掃描資料量大小不超過 9.9 MB 的查詢都無條件進位,並依 10 MB 為單位計費。失敗或停止的查詢不會產生任何費用。
此外,系統日誌資料表 (STL) 只會保留 2 至 5 天的日誌歷史記錄,具體保留時間取決於日誌使用情況和可用磁碟空間。為了保留傳輸的位元組記錄,最佳做法是計算每日查詢費用,並將資料儲存在另一個資料表中。
查詢範例:
CREATE VIEW spectrum_cost AS SELECT starttime::date as date, xid, query, trim(usename) as user, CASE WHEN s3_scanned_bytes < 10000000 then 10 ELSE s3_scanned_bytes/1024/1024 end as scanned_mb, round(CASE WHEN s3_scanned_bytes < 10000000 then 10*(5.0/1024/1024) ELSE (s3_scanned_bytes/1024/1024)*(5.0/1024/1024) end,5) as cost_$ FROM svl_s3query_summary s LEFT JOIN pg_user u ON userid=u.usesysid JOIN (select xid as x_xid,max(aborted) as x_aborted from svl_qlog group by xid) q ON s.xid=q.x_xid WHERE userid>1 AND x_aborted=0 AND s.starttime >= current_date-1;
**注意:**您也可以使用 CREATE TABLE 查詢來計算資料,並將其儲存在另一個資料表中。如果您不想指定時段期間,請刪除 current_date-1。
計算前一天查詢從 S3 掃描到 Redshift Spectrum 的資料量總和。若要估算總費用,請執行下列查詢:
SELECT current_date-1 as query_since, SUM(scanned_mb) as total_scanned_mb, SUM(cost_$) as total_cost_$ FROM spectrum_cost; Result: query_since | total_scanned_mb | total_cost_$ --------------+------------------+--------------- 2020-05-15 | 5029 | 0.02515
Redshift Spectrum 最佳做法
若要降低查詢費用並提高 Redshift Spectrum 的效能,請使用以下最佳做法:
- 使用 Redshift Spectrum 的成本控制和並行擴展功能來監控和控制您的使用情況。
- 使用最佳化的資料格式來提高效能並降低成本。使用 PARQUET 和 ORC 等單欄式資料格式,僅選擇要從 Amazon S3 掃描的欄位。
- 如果您不常存取資料,請將資料載入 Amazon S3 並使用 Redshift Spectrum。
- 當您使用多個 Amazon Redshift 叢集來擴展並行性時,請在作業完成後立即停止叢集。
Redshift Spectrum 的成本控制與並行擴展
如果您使用 Redshift Spectrum 的成本控制和並行擴展功能,那麼您可以建立每日、每週和每月的使用配額。當您達到使用配額時,Amazon Redshift 會自動採取動作。
若要設定成本控制,請完成以下步驟:
- 開啟 Amazon Redshift console (Amazon Redshift 主控台)。
- 選擇 Configure usage limit (設定使用限制)。
- 更新下列組態設定:
時段期間
使用限制
動作
注意:****動作設定可以幫助您管理使用配額。
若要設定並行擴展使用配額,請完成下列步驟:
- 開啟 Amazon Redshift console (Amazon Redshift 主控台)。
- 選擇 Concurrency scaling usage limit (並行擴展使用限制) 作為您的使用配額。
- 更新下列組態設定:
時段期間
使用限制
動作
注意:****時段期間位於 UTC 時區。在 Action (動作) 設定中,您也可以將 Amazon Simple Notification Service (Amazon SNS) 訂閱附加到「警示」和「停用」功能。如果您使用 Amazon Redshift 主控台啟用警示,則會自動為指標建立 Amazon CloudWatch 警示。
額外的成本控制需求和限制
若要管理您的 Redshift Spectrum 使用情況和成本,請查看以下需求和限制:
- 使用配額適用於支援的 1.0.14677 版或更新版本。
- 您可以為每個類別新增最多四個配額和動作,總配額為八個。
- 只有 Redshift Spectrum 和並行擴展可用的區域才支援 Redshift Spectrum。
- 每個功能只有一個配額可以使用「停用」功能。
- 使用配額會一直存在,直到您刪除使用配額定義或叢集為止。
- 如果您在某個期間的中間建立配額,則該配額是從中間點開始計算,直到該期間結束。
- 如果您選擇日誌選項,請查看 STL_USAGE_CONTROL 日誌中的詳細資訊。
相關資訊
- 語言
- 中文 (繁體)

相關內容
已提問 3 年前