サーバーレスリソースは、消費量と使用時間に基づいて課金されます。このガイドでは、Serverless Computing のリソース使用量を確認し、関連コストを見積もる方法について説明します。
課金に関する注意事項
Serverless Computing は、各 SQL ジョブに対して CU 時間 (コンピュートユニット × 時間) に基づいて課金します。このメトリックは、ジョブで使用された CU の量にジョブの実行時間を乗じてリソース消費量を測定します。1 時間ごとに、前の 1 時間の使用量が集約され、請求書が生成され、料金が自動的に引き落とされます。課金の詳細については、「課金の概要」をご参照ください。
Serverless Computing は、2024 年 7 月 1 日 (UTC+08:00) から商用化され、課金対象となります。
サポートされているリージョンとゾーンについては、「Serverless Computing ガイド」をご参照ください。
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 ms を超える正常に完了したサーバーレスコンピューティングタスクと、すべての失敗したタスクのみが記録されます。Hologres V2.2.7 以降のバージョンでは、すべてのサーバーレスコンピューティングタスクがスロークエリログで利用可能になります。
スロークエリログには、SQL 文ごとのリソース使用量が記録されます。請求書の生成中に、データ集約や単位変換などのプロセスにより、ログ内のデータと最終的な請求書との間にわずかな差異が生じる場合があります。
必要な権限
hologres.hg_serverless_computing_query_log をクエリするには、次の権限が必要です:
インスタンス内のすべてのデータベースのデータスキャンをクエリする
superuserロールを持っている場合:-- スーパーユーザはこのコマンドを実行できます。「Account ID」を実際の Alibaba Cloud アカウント ID に置き換えてください。RAM ユーザーの場合は、ID の前に「p4_」を付けます。 ALTER USER "Account ID" SUPERUSER;または、
pg_read_all_statsユーザーグループに追加されている一般ユーザの場合:説明一般ユーザーとしてすべてのスロークエリログを表示するには、インスタンスのスーパーユーザにこのグループへの追加を依頼してください。
GRANT pg_read_all_stats TO "Alibaba Cloud account ID";-- 標準 PostgreSQL 権限付与モデル 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ユーザーグループに追加します:CALL spm_grant('<db_name>_admin', 'Alibaba Cloud account ID'); -- SPM CALL slpm_grant('<db_name>.admin', 'Alibaba Cloud account ID'); -- SLPM一般ユーザーは、現在のデータベースで自身のクエリのデータスキャン量をクエリできます。
詳細については、「権限管理の概要」をご参照ください。
単一 SQL 文のリソース使用量のクエリ
例:
SELECT
*,
queue_time_ms, -- SQL 文がサーバーレスコンピューティングリソースを待機していた時間 (ミリ秒、ms)。
serverless_allocated_cores, -- SQL 文に割り当てられたサーバーレス CU の数。
serverless_resource_used_time_ms, -- SQL 文がサーバーレスコンピューティングリソースを使用していた時間 (ms)。
(serverless_allocated_cores::DECIMAL(38, 4)) * (serverless_resource_used_time_ms::DECIMAL(38, 4)) AS serverless_cums
FROM
hologres.hg_serverless_computing_query_log;指定期間内のリソース使用量のクエリ
例:
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' AND '2024-05-31 24:00:00';-- 時間範囲を指定します。SQL 文のリソース使用量の見積もり
サーバーレス コンピューティングを有効にする前に、既存の Hologres インスタンスで SQL 文を実行して、リソース要件を見積もります。 hologres.hg_query_log システムテーブルは、各 SQL タスクのリソース消費量を反映する cpu_time_ms (ミリ秒単位の CPU 時間) を記録します。 次の数式を使用して、サーバーレス リソース使用量 (CU-hours) を見積もります: cpu_time_ms / 1000 / 60 / 60。 cpu_time_ms をクエリします:
SELECT cpu_time_ms FROM hologres.hg_query_log WHERE query_id = 'xxx';インスタンスの予約済みリソースで SQL 文を実行してサーバーレスリソースの使用量を見積もるのは、概算にすぎません。これは、インスタンスの予約済みリソースが他のワークロードの影響を受ける可能性があるためです。さらに、これら 2 つのリソースタイプのキャパシティは異なる場合があります。より正確な評価のためには、主要な SQL タスクを選択し、サーバーレスリソースで直接その実際のリソース使用量をテストすることを推奨します。このテストプロセスは独立して実行され、インスタンス上の他のタスクに影響を与えません。詳細については、「Serverless Computing ユーザーガイド」をご参照ください。
リソース使用量の監視
日次割当クォータの設定
Hologres V3.1.5 以降では、スーパーユーザは次のコマンドを使用して、サーバーレスコンピューティングリソースの日次使用量を制限できます:
-- DB のリソースクォータを設定します。
ALTER DATABASE <db_name> SET hg_serverless_computing_daily_max_cuh_usage_threshold = xx;
-- ユーザーのリソースクォータを設定します。
ALTER USER <user_name> SET hg_serverless_computing_daily_max_cuh_usage_threshold = xx;注意事項
hg_serverless_computing_daily_max_cuh_usage_thresholdのデフォルト値は-1で、これは制限が適用されないことを意味します。単位: CU 時間。
Hologres は、インスタンスのサーバーレスコンピューティングリソースの総使用量を 10 分ごとに更新します。そのため、制限の適用が最大 10 分遅れることがあります。
SQL 文を実行する前に、Hologres はその日に使用されたサーバーレスコンピューティングリソースを、現在のユーザーまたはデータベースの日次リソースクォータと比較します。制限に達した場合、SQL 文はインスタンスの予約済みリソースにフォールバックします。
Hologres は、データベースのデフォルトタイムゾーンにおける暦日に基づいて、サーバーレスコンピューティングリソースの消費量を計算します。同じセッション内で次の文を実行することで、データベースのデフォルトタイムゾーンをクエリできます:
-- クライアントのタイムゾーンやユーザーのデフォルトタイムゾーンの影響を避けるために、タイムゾーンをリセットします。 RESET timezone; -- 現在の DB のデフォルトタイムゾーンをクエリします。 SHOW timezone;
推奨事項
長期ユーザーの場合: サーバーレスコンピューティングリソースの適切な日次割当クォータを決定するには、特定の期間のリソース使用量を分析してください。
新規ユーザーの場合: まず、安定した本番環境でこの機能を十分に利用することを推奨します。使用パターンを観察した後、日次の累積使用量制限を設定するかどうかを決定できます。
Serverless Computing の使用量制限に達したときに SQL 文がインスタンスの予約済みリソースにフォールバックするのを防ぐには、スーパーユーザとして次のコマンドを実行します。この構成により、クエリは失敗し、エラーが返されます。
-- DB レベルで設定します。
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;hg_serverless_computing_enable_fallback_when_exceed_cuh_thresholdのデフォルト値は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。
コストの分析
費用とコストコンソールで、Serverless Computing リソースのコストを監視および分析します。
費用とコストにログインします。左側のナビゲーションウィンドウで、 をクリックします。
[コスト分析] ページで、右側の [条件] セクションで、[カテゴリ] を [請求項目] に設定し、[コストタイプ] と [時間単位] を設定します。
[フィルター] セクションで、必要に応じてフィルター項目を設定します。
詳細については、「コスト分析」をご参照ください。
コストアラートの設定
費用とコストコンソールでは、予算を管理し、従量課金アイテムのアラートを設定できます。詳細については、「コストアラート」をご参照ください。
長時間クエリのアラート作成
Hologres は、Serverless Computing メトリックの監視をサポートしています。予期しないコストを防ぐために、Serverless Computing のアラートルールを作成することを推奨します。
たとえば、サーバーレスコンピューティングの最長アクティブクエリ時間メトリックの場合、推奨されるアラートルールは次のとおりです:
警告:「サーバーレスコンピューティング / サーバーレスコンピューティングの最長アクティブクエリ時間」メトリックの値が 5 連続サイクル (1 サイクル = 1 分) で 3,600,000 ミリ秒以上です。

詳細については、「アラートルールの設定」をご参照ください。