CosmosDBの課金が複雑で分かりにくいのでメモ。用語の表記揺れも多い。
前提
- Provisioned throuput
- Autoscaling
ですが、他の種類についても書く
RU
(=Request Units、要求ユニット)
- DBのパフォーマンスの単位
- 毎秒のRU/sが基本だが、積算して計算することもある
- RU/sを単位RUと書くこともある
- 設定:CosmosDBでスループットのプロビジョニング設定をする。RUで指定する
Azure Cosmos DB によってサポートされるデータベース操作を実行するために必要な処理 CPU、1 秒あたりの入出力処理 (IOPS)、メモリなどのシステム リソースを抽象化する、パフォーマンスの通貨です。
ms learn
課金
時間単位の意味
課金は、60 分という期間ではなく、実測時間に対して行われます。
ms learn
利用開始から1時間ではなく、00分から次の00分を1時間とする。短時間利用の場合は切り上げられる形で課金が多くなる可能性がある。例えば9:45〜10:00の15分だけ利用した場合でも、9:00〜10:00の時間枠で課金対象になる。
データベース操作の課金
2種類ある。
1.プロビジョニングされたスループット
- プロビジョニング スループットの「1時間での最大値」に対し、100 RU/秒ずつ、時間単位で課金
- (以下、自動スケールの場合の話)
- メトリクスの最小間隔は1分。その1分の間にピークがある場合はメトリクスに反映されないため、RU消費ピークやAutoscaleによるプロビジョニングの秒単位の変動はユーザー側で知ることができない
- 一方で、課金はプロビジョニングのRU/sの最大値に対して計算される
2.サーバーレス
- データベース操作によって使用されたRUの合計に対し、時間単位で課金。RU設定不可。予約設定なし
ストレージの課金
- データおよびインデックスで使用したストレージの合計量 (GB) に対して時間単位で課金
自動スケーリング
(=Autoscaling、オートスケーリング)
-
Autoscalingのとき課金は標準プロビジョニングの1.5倍になる。Reservationのときも同様に1.5倍の予約容量が消費される - プロビジョニングスループット設定に対して10%〜100%の間でスケーリングする。最小が10%なので
RU使用量 < プロビジョニング設定の10%だと無駄遣いになる
CosmosDBのReservation
(=予約、 RI)
- RU/sを安く買う契約
- 割引率は標準で1年20%, 3年30%だが、予約容量サイズによって割引率が変動する
- 消費しなくてもRIは使用されるので注意
- 例えば
(max)プロビジョニング設定 < RIとしてしまうと、無駄になる
- 例えば
-
予約容量 < 課金対象プロビジョニングであればRIを超えた分は通常料金になる -
プロビジョニング設定 < 使用RU/sのときにスロットリング(429)する- このとき Normalized RU は 100% になっている。(Normalized RUは、 RU/s 使用率の最大値を 0〜100% で表すメトリック)
- ServerlessにはRIなしms learn
RIを使う計算例
$10,000を30日で使い切るとすると
144,676 RU/s を常時使っているのと同じ。
割引なしなら$12,500。
=>割引分の20%、つまり115,741RU/s 以下なら、RIは無駄遣いになる
計算
$10,000 / (24*30) / 0.0096 * 100
= 144,676 RU/s
| 通常料金 $ 100RI/s/ hour | 0.008 |
| 割引料金 $ 100RI/s/ hour | 0.0064 |
| autoscale換算 $ 100RI/s/ hour | 0.0096 |
| Azure Cosmos DB | NoSQL |
| Region | East US |
| autoscale | あり |
| RI | 1年 |
| 割引 | 20% |
| autoscale | 1.5倍換算 |
Ref