Redshift Serverless の請求詳細を計算できるように、Amazon Redshift プロセッシングユニット (RPU) の使用状況をクエリしたいと考えています。
簡単な説明
実行するワークロードに基づいてコストが発生します。ワークロードは RPU 時間で測定され、1 分間の最小料金で秒単位で計上されます。詳細については、「Amazon Redshift Serverless での請求」を参照してください。
解決策
コストに関する情報を取得するには、Amazon Redshift Serverless アカウントに接続されているクライアントツールまたはクエリエディタを使用して次のクエリを実行します。詳細については、「Amazon Redshift Serverless への接続」を参照してください。
**注:**次のクエリでは、AWS\ _REGION\ _PRICE を、お使いの AWS リージョンの RPU 時間あたりの料金に置き換えます。RPU コストの詳細については、Amazon Redshift 料金ページの「Amazon Redshift Serverless 」を参照してください。
次のクエリから得られるコスト出力は概算です。出力は、AWS 請求コンソールに表示される Amazon Redshift Serverless Costとは異なる場合があります。
1 日あたりの費用
過去 7 日間に毎日発生した費用を調べるには、次のクエリを実行します。
SELECT date_trunc('d',start_time) "Day",
(
sum(charged_seconds)/3600::double precision
) * AWS_REGION_PRICE as cost_incurred
FROM sys_serverless_usage
GROUP BY 1
ORDER BY 1;
**注:**Amazon Redshift Serverlessは、5~7 日分の履歴データのみを保存します。7 日より前のデータを取得できない場合があります。
出力例:
day | cost_incurred($)
--------------------+--------------------------
2024-05-27 00:00:00 | 1.536
2024-05-29 00:00:00 | 59.903999999999996
2024-05-30 00:00:00 | 13.824
2024-05-31 00:00:00 | 0.768
特定日の RPU 使用量とコスト
前日の RPU 使用量と合計コストを確認するには、次のクエリを実行します。他の日付をクエリするには、dateadd(day,-1,sysdate) の \ -1 を別の負の数に変更します。
SELECT date_trunc('d',start_time) as "day",
(
sum(charged_seconds)/3600::double precision
) * <AWS_REGION_PRICE> as cost_incurred,
min(compute_capacity) min_rpu,
max(compute_capacity) max_rpu,
avg(compute_capacity) avg_rpu,
max(data_storage) as max_storage
FROM sys_serverless_usage
WHERE "day" = date_trunc('d', dateadd(day,-1,sysdate))
GROUP BY 1
ORDER BY 1
出力例:
day | cost_incurred ($) | min_rpu | max_rpu | avg_rpu | max_storage
---------------------+-------------------+------------+-----------+-------------+-------------
2024-05-30 00:00:00 | 13.824 | 0 | 128 | 92.16 | 3166
RPU 使用量とクエリあたりのコスト
特定の日付に実行したクエリのおおよその RPU 使用量とコストを取得するには、次のクエリを実行します。
with
daily_cost as (
select
trunc(start_time) "YYY-MM-DD",
max(compute_capacity) max_compute_capacity,
(sum(charged_seconds) / 3600:: double precision) * <AWS_REGION_PRICE> as daily_cost
from
sys_serverless_usage
group by
1
),
daily_queries as (
SELECT
*,
elapsed_time / total_time_for_day:: double precision as perc
from
(
SELECT
query_id,
user_id,
query_text,
trunc(start_time) "Day",
elapsed_time,
sum(elapsed_time) over (partition by trunc(start_time)) total_time_for_day
FROM
sys_query_history
)
)
select
q.*,
c.daily_cost * q.perc as query_cost,
c.*
from
daily_cost c
join daily_queries q using ("Day") where Day ='<start_date>';
**注:**YYYY-MM-DD を、クエリ対象の特定の日付に置き換えます。日付は YYYY-MM-DD 形式でなければなりません。
出力例:
query_id| user_id | day | elapsed_time | total_time_for_day | perc | query_cost | day | max_compute_capacity | daily_cost | query_text
--------+---------+------------+--------------+--------------------+------------------------+------------------------+------------+----------------------+------------------+--------------------------------------+
5240721 | 101 | 2024-05-30 | 174646 | 22720291 | 0.00768678534971229 | 0.10921384624871222 | 2024-05-30 | 128 | 14.208 | SELECT table_name as view_name, table_type, schema_name FROM SVV_ALL_TABLES WHERE database_name='dev' AND schema_name='lakeformation_schema' and table_type IN ('VIEW');
5240073 | 101 | 2024-05-30 | 765 | 22720291 | 0.00003367034339480951 | 0.00047838823895345354 | 2024-05-30 | 128 | 14.208 | select oid, lanname from pg_language order by lanname asc
**重要:**出力は近似値です。クエリは、その日付に発生した合計コストを決定し、クエリの経過時間に基づいて起動されたすべてのクエリにコストを分配します。
関連情報
SYS_SERVERLESS_USAGE
SYS_QUERY_HISTORY