読者です 読者をやめる 読者になる 読者になる

Azure SQL データベースの課金の仕様がややこしい

.net

Azure SQL Database で、データを Insert したり Delete したり、ときにはデータベースを CREATE したり DROP したりしていたら、無料評価版の有効期限を30日残して Azure SQL Database の使用制限に達してしまった。

てっきり、データベースに保存しているデータのサイズで課金されると思っていた。Webエディション1GBなら、データのサイズが1GB以内に収まっている間は定額、って思っていたら違ったみたい。






『料金の詳細』ページを何度も読み直してみた。

使用される SQL データベースごとに月額料金が課金されますが、このデータベース料金はその月の日数で按分され、日割りで計算されます。データベースが 1 GB を超える場合、超過した GB 分全体に対して課金されます。たとえば、4.4 GB と 14.4 GB の 2 つの Business Edition データベースを請求月中の 1 日に使用した場合、その日については 5 GB および 15 GB のデータベース使用料が課金され、合計は \231.03 になります。計算式は次のとおりです。

  • 5 GB: (\873.23 (最初の 1 GB) + \349.30 (残りの 4 GB の 1 GB あたりの料金)) / 31 日 = \73.25
  • 15 GB: (\4,016.84 (最初の 10 GB) + \174.65 (残りの 5 GB の 1 GB あたりの料金)) / 31 日 = \157.78

イマイチ分からない。

料金の詳細ページよりも、次の記事の方が詳しかった。

SQL Azure の課金に関する基本的なポイント
  • SQL Azure の課金は、Web Edition と Business Edition とで分かれている。
    • 例えば、Business Edition を含んだコミットメントプランを購入したサブスクリプションで、Web Edition データベースを利用すると、コミットメントプランに含まれないデータベースを使ったものとみなされ、従量課金されてしまう。
  • データベースは、実際のデータベースサイズ(Current Size)に基づき、日割りで課金される。
    • 料金表は月あたりの金額で書かれているが、課金は日割りで行われる。(日割り計算の詳細なロジックは後述)
  • master データベース、temp データベースなどは課金対象外。
    • ユーザデータベースのみが課金対象になる。
    • データ量は、テーブル内のデータの量だけでなく、インデックスデータの量なども含まれるが、ログデータは含まれない。(簡単に言えば .mdf データファイルの容量であり、.ldf ログファイルの容量は含まれない)
課金の日割り計算に関するキーポイント
  • 従量課金の場合
    • その日のピークデータ量(Current Size)に基づいて、日割りで課金される。(データベース定義上のMAXSIZEではない)
    • どの月であっても、常に”31”で日割り計算が行われる。(30日以下の月であっても、31で日割り計算が行われる)
  • コミットメントプランの場合
    • 基本的には、従量課金と同じ方式で計算が行われる。
    • しかし、その月の利用量が購入ユニット数よりも少なかった場合には、購入ユニット数まで繰り上げが行われる。
    • この繰り上げ計算は「月」単位で行われる。

公式もこれくらい詳しく書いてほしいね。

これらを読んで、自分の中では今のところ

  • ユーザーが作成したデータベースごとに課金される
    • 2つデータベースを作ったら2つぶん課金される
  • 同じ日にデータベースを削除して作り直したら、その日は2つデータベースを使ったとみなされる
  • 1日の瞬間最大データベースサイズをもとに日額が決まる。
    • 計算式は引用の通り。
  • Insert・Update でデータが増えれば、データ使用量は増える。
  • Update でデータが減ったり、Delete で削除した場合は、データ使用量は減る。

のように解釈したけど、Azure SQL Database の課金の仕様はややこしすぎて自信無し。

2012/06/25 追記

Microsoft に問い合わせてみた。

  • 1日の間に、1GB Insert して、1GB Delete して、また 1GB Insert したときの課金対象となるデータ使用量は?
    • 2GB が課金対象になる。
  • 既に 1GB 使っていて、1日の間に Delete だけ行ったとき、課金対象となるデータ使用量は?
    • その日は既に 1GB 使っていた、ということなので、削除前の 1GB が課金対象になる。

どこがシンプルなんだろうね?まったくややこしい。