サーバーレスコンピュートのコストを監視する
この記事では、課金利用システムテーブル (パブリック プレビュー) を使用して、サーバーレス コンピュートの使用コストを監視する方法について説明します。
課金利用システムテーブル ( system.billing.usage
) を照会することで、データベースとワークフローのサーバーレス コンピュートの使用状況を監視できます。このテーブルには、サーバーレス コンピュートのコストに関連するユーザーとワークロードの属性が含まれています。 適用可能なフィールドは次のとおりです。
identity_metadata
列にはrun_as
フィールドが含まれており、ワークロードの実行に資格情報が使用されたユーザーまたは サービスプリンシパル が表示されます。usage_metadata
列には、ワークロードを説明するフィールド(job_run_id
とnotebook_id
)があります。
サーバーレス使用記録に関する考慮事項
サーバーレスの使用状況を分析するときは、次の点を考慮してください。
特定の時間に、特定のサーバーレス コンピュート ワークロードに関連付けられた複数のレコードが表示される場合があります。 たとえば、
job_id
とjob_run_id
は同じだが、それぞれ DBU 消費量が異なるレコードが複数表示される場合があります。 これらの DBU の合計は、特定のジョブ実行における 1 時間あたりの DBU 消費量を表します。また、 を使用して 消費量が課金されたレコードが表示される場合もありますが、 、 、 、 DBUSKUの値は null
run_as
job_id
job_run_id
notebook_id
です。これらは、特定のワークロードに直接起因しない共有リソースに関連するコストを表します。 サーバーレス コンピュート の使用量を増やしてワークロードを追加すると、これらの共有コストがより多くのワークロード間で共有されるため、請求書に占める共有コストの割合が減少します。
予算を使用して支出を監視する
アカウント管理者は予算を設定してコストをグループ化し、アラートを設定できます。 「予算を使用してアカウントの支出を監視する」を参照してください。
使用状況ダッシュボードをインポートする
アカウント管理者は、アカウント内の Unity Catalog 対応のワークスペースにコスト管理ダッシュボードをインポートできます。 使用状況ダッシュボードのインポートを参照してください。
アラートを使用してサーバーレスの支出を追跡する
アラートは、サーバーレスの支出について常に情報を得るための強力な方法です。 アラートを使用すると、クエリ結果で特定の条件が満たされたときに通知を受け取ることができます。 アラートを作成する方法については、 「アラートを作成する」を参照してください。
次のクエリにアラートを追加して予算を監視できます。 各クエリで、 {budget}
を選択した予算に置き換えます。
過去 30 日間のワークスペースの支出がしきい値を超えた場合にアラートを通知します
このクエリが行を返すたびにアラートをトリガーするように設定できます。 {budget}
選択した予算に置き換えてください。
SELECT
t1.workspace_id,
SUM(t1.usage_quantity * list_prices.pricing.default) as list_cost
FROM system.billing.usage t1
INNER JOIN system.billing.list_prices on
t1.cloud = list_prices.cloud and
t1.sku_name = list_prices.sku_name and
t1.usage_start_time >= list_prices.price_start_time and
(t1.usage_end_time <= list_prices.price_end_time or list_prices.price_end_time is null)
WHERE
t1.sku_name LIKE '%SERVERLESS%'
AND billing_origin_product IN ("JOBS", "NOTEBOOKS")
AND t1.usage_date >= CURRENT_DATE() - INTERVAL 30 DAYS
GROUP BY
t1.workspace_id
HAVING
list_cost > {budget}
ユーザーが過去 30 日間にしきい値を超えた場合に通知します
このクエリが行を返すたびにアラートをトリガーするように設定できます。 {budget}
選択した予算に置き換えてください。
SELECT
t1.identity_metadata.run_as,
SUM(t1.usage_quantity * list_prices.pricing.default) as list_cost
FROM system.billing.usage t1
INNER JOIN system.billing.list_prices on
t1.cloud = list_prices.cloud and
t1.sku_name = list_prices.sku_name and
t1.usage_start_time >= list_prices.price_start_time and
(t1.usage_end_time <= list_prices.price_end_time or list_prices.price_end_time is null)
WHERE
t1.sku_name LIKE '%SERVERLESS%'
AND billing_origin_product IN ("JOBS", "NOTEBOOKS")
AND t1.usage_date >= CURRENT_DATE() - INTERVAL 30 DAYS
GROUP BY
t1.identity_metadata.run_as
HAVING
list_cost > {budget}
過去 30 日間にジョブがしきい値を超えた場合に通知します
このクエリが行を返すたびにアラートをトリガーするように設定できます。 {budget}
選択した予算に置き換えてください。
SELECT
t1.workspace_id,
t1.usage_metadata.job_id,
SUM(t1.usage_quantity * list_prices.pricing.default) as list_cost
FROM system.billing.usage t1
INNER JOIN system.billing.list_prices on
t1.cloud = list_prices.cloud and
t1.sku_name = list_prices.sku_name and
t1.usage_start_time >= list_prices.price_start_time and
(t1.usage_end_time <= list_prices.price_end_time or list_prices.price_end_time is null)
WHERE
t1.sku_name LIKE '%SERVERLESS%'
AND billing_origin_product IN ("JOBS")
AND t1.usage_date >= CURRENT_DATE() - INTERVAL 30 DAYS
GROUP BY
t1.workspace_id, t1.usage_metadata.job_id,
HAVING
list_cost > {budget}
サンプル クエリ
次のクエリを使用して、アカウント内のサーバーレスの使用状況を把握します。
高価なサーバレスコンピュートを特定する
このクエリは、 DBU消費量の降順で、データベースと各データベースが消費した DBU 数のリストを返します。
SELECT
usage_metadata.notebook_id,
SUM(usage_quantity) as total_dbu
FROM
system.billing.usage
WHERE
usage_metadata.notebook_id is not null
and billing_origin_product = 'INTERACTIVE'
and product_features.is_serverless
and usage_unit = 'DBU'
and usage_date >= DATEADD(day, -30, current_date)
GROUP BY
1
ORDER BY
total_dbu DESC
高価なサーバーレスコンピュートジョブを特定する
このクエリは、ジョブのリストと、各ジョブが消費した DBU の数を、 DBU消費量の降順で返します。
SELECT
usage_metadata.job_id,
SUM(usage_quantity) as total_dbu
FROM
system.billing.usage
WHERE
usage_metadata.job_id is not null
and billing_origin_product = 'JOBS'
and product_features.is_serverless
and usage_unit = 'DBU'
and usage_date >= DATEADD(day, -30, current_date)
GROUP BY
1
ORDER BY
total_dbu DESC
特定のユーザーが消費した DBU に関するレポート
このクエリは、特定のユーザーまたはサービスプリンシパルによって serverless コンピュート 実行 を使用するワークロードとジョブのリストと、各ワークロードで消費された DBU の数を返します。
SELECT
usage_metadata.job_id,
usage_metadata.notebook_id,
SUM(usage_quantity) as total_dbu
FROM
system.billing.usage
WHERE
identity_metadata.run_as = '<emailaddress@domain.com>'
and billing_origin_product in ('JOBS','INTERACTIVE')
and product_features.is_serverless
and usage_unit = 'DBU'
and usage_date >= DATEADD(day, -30, current_date)
GROUP BY
1,2
ORDER BY
total_dbu DESC