Hologres のサーバーレスコンピューティングは、CPU やメモリの負荷が高いといったリソースを大量に消費する SQL ジョブに対し、消費されたコンピューティングリソースと実行時間に基づいて課金します。本トピックでは、リソース消費量の確認方法と課金の詳細について説明します。
課金
サーバーレスコンピューティング機能では、各 SQL ジョブのリソース使用量をコンピューティングユニット・時間 (CU・H) で測定します。システムは、消費されたリソースと実行時間を掛け合わせることでこの値を計算します。課金は 1 時間ごとに決済されます。システムは毎時間、前の 1 時間にサーバーレスコンピューティングで実行されたすべての SQL ジョブの使用量を集計し、対応する料金を差し引きます。具体的な単価については、「課金の概要」をご参照ください。
-
サーバーレスコンピューティングの課金は、北京時間
2024 年 7 月 1 日に正式に開始されました。以下の情報を参照して、サーバーレスコンピューティングのリソース消費量を監視し、請求額を見積もってください。必要に応じて、ジョブのリソース割り当てを調整し、予期しないコストの発生を回避してください。 -
サーバーレスコンピューティングが利用可能なリージョンとゾーンのリストについては、「サーバーレスコンピューティングユーザーガイド」をご参照ください。
-
hologres.hg_query_logとhologres.hg_serverless_computing_query_logは、いずれも過去 30 日間のデータを保持します。
正常に完了した SQL ジョブのみが課金対象となります。失敗したジョブには料金は発生しません。
リソース消費量の確認
Hologres V2.1.18 以降では、hologres.hg_serverless_computing_query_log ビューをクエリすることで、サーバーレスコンピューティングジョブのリソース消費量を計算し、サーバーレスリソースの課金式に基づいてコストを見積もることができます。スロークエリログの詳細については、「スロークエリログの表示と分析」をご参照ください。
-
Hologres V2.2.7より前のバージョンでは、スロークエリログは実行時間が100ミリ秒を超える成功したサーバーレスコンピューティングジョブと、すべての失敗したジョブのみを記録していました。Hologres V2.2.7以降のバージョンでは、すべてのサーバーレスコンピューティングジョブを表示できます。 -
課金にはデータの集計と単位変換が含まれるため、ログデータと最終的な請求額の間にわずかな差異が生じる可能性があります。
権限
スロークエリログからサーバーレスコンピューティングのリソース消費量とコストを見積もるには、特定の権限が必要です。以下のセクションでは、必要な権限と権限付与の方法について詳しく説明します。
-
インスタンス内のすべてのデータベースのデータスキャン量をクエリする
-
オプション 1: スーパーユーザー権限を付与します。 以下のコマンドでこの権限を付与します。
-- "Alibaba Cloud account ID" を実際のユーザー名に置き換えます。RAM ユーザーの場合は、アカウント ID の前に "p4_" を付けます。 ALTER USER "Alibaba Cloud account ID" SUPERUSER; -
オプション 2: ユーザーを pg_read_all_stats ユーザーグループに追加します。 権限モデルに応じて、以下のいずれかのコマンドを使用します。
説明スーパーユーザー権限に加えて、Hologres では pg_read_all_stats ユーザーグループのメンバーがすべてのデータベースのデータスキャン量を表示できます。一般ユーザーがすべてのログを表示する必要がある場合は、スーパーユーザーに依頼して、権限の付与とグループへの追加を行ってもらう必要があります。
GRANT pg_read_all_stats TO "Alibaba Cloud account ID"; -- エキスパート権限モデルの場合 CALL spm_grant('pg_read_all_stats', 'Alibaba Cloud account ID'); -- 簡易権限モデル (SPM) の場合 CALL slpm_grant('pg_read_all_stats', 'Alibaba Cloud account ID'); -- スキーマレベルの簡易権限モデル (SLPM) の場合
-
-
現在のデータベースのデータスキャン量を表示する
-
簡易権限モデル (SPM) または スキーマレベルの簡易権限モデル (SLPM) を有効にし、ユーザーを db_admin ロールに追加します。 db_admin ロールは、現在のデータベースのデータスキャン量を表示できます。以下のいずれかのコマンドを使用して、このロールを付与します。
CALL spm_grant('<db_name>_admin', 'Alibaba Cloud account ID'); -- SPM の場合 CALL slpm_grant('<db_name>.admin', 'Alibaba Cloud account ID'); -- SLPM の場合 -
一般ユーザーは、自分のアカウントで現在のデータベースで実行したクエリについて、そのデータスキャン量を確認できます。
-
権限操作の詳細については、「権限管理の概要」をご参照ください。
単一 SQL の消費量のクエリ
以下の SQL ステートメントを使用して、サーバーレスコンピューティングジョブの詳細なリソース消費量を照会します。
SELECT
*,
queue_time_ms, -- SQL クエリがサーバーレスコンピューティングキューで待機する時間 (ミリ秒単位)。
serverless_allocated_cores, -- サーバーレスコンピューティングによって現在の SQL クエリに実際に割り当てられた CU の数。
serverless_resource_used_time_ms, -- SQL クエリがサーバーレスコンピューティングリソースを実際に占有する時間 (ミリ秒単位)。
(serverless_allocated_cores::DECIMAL(38, 4)) * (serverless_resource_used_time_ms::DECIMAL(38, 4)) AS serverless_cums
FROM
hologres.hg_serverless_computing_query_log;
時間範囲内の消費量のクエリ
以下の SQL ステートメントを使用して、指定した時間範囲内の成功したサーバーレスコンピューティングジョブの合計リソース消費量を照会します。
SELECT
(SUM((serverless_allocated_cores::DECIMAL(38, 4)) * (serverless_resource_used_time_ms::DECIMAL(38, 4))) / 1000 / 60 / 60)::bigint AS serverless_cuh
FROM
hologres.hg_serverless_computing_query_log
WHERE
status = 'SUCCESS'
AND serverless_allocated_cores IS NOT NULL
AND serverless_resource_used_time_ms IS NOT NULL
AND query_end BETWEEN '2024-05-01 00:00:00+08'::timestamptz AND '2024-05-31 24:00:00+08'::timestamptz;-- 時間範囲を指定します。
リソース消費量の見積もり
サーバーレスコンピューティングをまだ有効にしていないが、特定の SQL クエリをサーバーレスリソースで実行したい場合は、まず Hologres インスタンスでそれらを実行できます。 hologres.hg_query_log システムテーブルには cpu_time_ms フィールドが含まれており、これを使用して SQL ジョブが消費した CPU 時間を確認できます。次に、cpu_time_ms / 1000 / 60 / 60 という式を使用して、同じクエリをサーバーレスリソースで実行した場合の消費量を概算できます。cpu_time_ms 情報をクエリする SQL コマンドは以下の通りです。
SELECT cpu_time_ms FROM hologres.hg_query_log WHERE query_id = 'xxx';
インスタンスリソースは他のワークロードの影響を受ける可能性がありますが、サーバーレスリソースは分離されています。また、リソース容量が異なる場合があります。そのため、この方法ではサーバーレスリソースの消費量を正確に見積もることはできません。いくつかの重要な SQL ジョブを選択し、サーバーレスコンピューティングユーザーガイドに従ってサーバーレスリソースで直接テストすることを推奨します。これにより、インスタンス上の他のジョブに影響を与えることなく、実際のリソース消費量を測定できます。
コストの監視とアラートの設定
1 日の使用量上限の設定
Hologres V3.1.5 以降では、SQL を使用してサーバーレスコンピューティングリソースの 1 日の使用量上限を設定できます。 この上限を設定できるのはスーパーユーザーのみです。
-- データベースの上限を設定します。
ALTER DATABASE <db_name> SET hg_serverless_computing_daily_max_cuh_usage_threshold = <value>;
-- ユーザーの上限を設定します。
ALTER USER <user_name> SET hg_serverless_computing_daily_max_cuh_usage_threshold = <value>;
-
上限の詳細
-
デフォルト値は -1 で、上限が設定されていないことを意味します。
-
単位は CU・H です。
-
Hologres は、現在のインスタンスのサーバーレスコンピューティングリソースの合計使用量を 10 分ごとに集計して更新します。そのため、上限の適用には最大 10 分の遅延が生じる可能性があります。
-
SQL クエリを実行する前に、Hologres はインスタンスが今日使用したサーバーレスリソースの合計と、現在のユーザーまたはデータベースのサーバーレスリソース上限を比較します。 上限に達している場合、クエリは自動的にインスタンスのコンピューティングリソースを使用するようにフォールバックします。 上限に達していない場合、クエリは通常通りサーバーレスリソースを使用して実行されます。
-
Hologres は、現在のデータベースのデフォルトタイムゾーンにおける暦日に基づいて、サーバーレスコンピューティングリソースの 1 日の使用量を計算します。同じセッションで以下のコマンドを実行して、現在のデータベースのデフォルトタイムゾーンをクエリできます。
-- クライアントまたはユーザーのデフォルトタイムゾーンの影響を避けるために、タイムゾーンをリセットします。 RESET timezone; -- 現在のデータベースのデフォルトタイムゾーンをクエリします。 SHOW timezone;
-
-
推奨事項
-
Hologres サーバーレスコンピューティング機能を長期的に使用している場合は、特定の時間範囲内のリソース消費量をクエリすることで、適切な 1 日の使用量上限を決定できます。
-
Hologres サーバーレスコンピューティング機能を以前に使用したことがない場合は、まずワークロードが安定するまで機能を使用することを推奨します。その後、使用パターンに基づいて、1 日の使用量上限を設定するかどうかを決定し、適切な値を決定してください。
-
サーバーレスコンピューティングの上限に達したときに SQL クエリがインスタンスコンピューティングリソースにフォールバックしないようにする場合は、以下のコマンドを実行して、クエリを即座に失敗させることができます。 このパラメータはスーパーユーザーのみが設定できます。
-- データベースレベルでパラメータを設定します。
ALTER DATABASE <db_name> SET hg_serverless_computing_enable_fallback_when_exceed_cuh_threshold = false;
-- ユーザーレベルでパラメータを設定します。
ALTER USER <user_name> SET hg_serverless_computing_enable_fallback_when_exceed_cuh_threshold = false;
-
デフォルト値は
trueです。上限を超えると、SQL クエリは自動的にインスタンスリソースの使用にフォールバックします。 -
このパラメータは
falseに設定できます。 上限を超えた場合、SQL クエリは即座に失敗し、次のエラーが返されます:serverless computing is not available due to exceeding cuh usage threshold, please adjust the threshold or trun off serverless computing for current query
費用分析
費用の モジュールを使用して、Hologres のコンピューティングリソースのコストを監視および分析できます。
-
費用にログインします。 左側メニューで、 をクリックします。
-
費用分析ページの右側の セクションで、[請求項目] を選択します。 次に、ニーズに応じて [費用タイプ] と [時間粒度] を選択します。
-
右側の [フィルター条件] エリアで、特定のリソースタイプに基づいて適切な [請求項目] を選択します。
詳細については、「費用分析」をご参照ください。
支出アラート
Alibaba Cloud の費用を使用して、特定のリージョンの特定の製品に対する従量課金の支出について、予算を管理し、アラートを設定できます。 詳細については、「支出アラート」をご参照ください。
単一 SQL 実行時間のアラート
Hologres は、サーバーレスコンピューティングのランタイムメトリクスをサポートしています。予期しないコストを回避するために、ビジネスユースケースに基づいてアラートルールを作成することを推奨します。
たとえば、[実行中のサーバーレスコンピューティングクエリの最長実行時間] というメトリクスに対して、以下のアラートルールを推奨します。
警告:「実行中のサーバーレスコンピューティングクエリの最長実行時間が 3,600,000 ミリ秒以上である状態が 5 期間連続 (1 期間 = 1 分) で続いています。」
詳細については、「監視とアラートのベストプラクティス」をご参照ください。
関連トピック
-
サーバーレスコンピューティング機能の概要については、「サーバーレスコンピューティング」をご参照ください。
-
サーバーレスコンピューティング機能の使用方法については、「サーバーレスコンピューティングユーザーガイド」をご参照ください。