SQL Azureの最大サイズについて過去の投稿で、2回ほど説明をしました。
しかし、それぞれで微妙に説明の仕方が違うことで、仕様理解をさまたげる結果となっていました。SQL Azureの最大サイズについて改めて整理することで、仕様について確認したいと思います。
SQL Azureデータベースの種類
SQL Azureのデータベースは、データベースを作成する際にエディションと最大サイズを指定します。
エディションには、WEBとBusinessの2種類あります。
最大サイズは、WEBエディションは「1GBまで」、「5GBまで」の2種類あり、Businessエディションには、「10GBまで」、「20GBまで」、「30GBまで」、「40GBまで」、「50GBまで」の5種類あります。
以上を図示すると次の表のようになります。
エディションと最大サイズの設定・変更方法
SQL Azureデータベースのエディションや最大サイズを指定(変更)するには、
- データベースを作成するときのCREATE文で指定する
- 作成後にALTER DATABASE文で変更する
の2種類の方法がありますが、どちらにしても明示的にSQLを発行する必要があり、自動的にエディションや最大サイズが変わることはありません。
最大サイズと課金
SQL Azureの課金は、実際のデータベース使用量に応じて課金されます。
例えば、最大サイズを50GBに設定していても、実際の使用量が15GBの場合は、10GB~20GBの使用量が課金されます。つまり、最大サイズは直接課金に関係が無く、実際の使用量に応じて課金されます。ただし、エディションは関係があります。たとえば、Business Editionを使用していて、使用量が0.5GBの場合は、Business Editionの0~10GBの使用量が課金されます(決して、Webエディションの0~1GBの課金にはなりません)。
最大サイズの目的は、ストッパーです。大量のデータが格納されてしまい、想像しなかったデータベース使用量となり課金額が増える事態を防ぐためのものです。基本的に設定した最大サイズを越えてデータを格納することができません。最大サイズを20GBにしておけば、20GBしか格納できないので課金の最大額を制限することができます。
最大サイズの仕様
最大サイズを指定しておくと、基本的に設定した最大サイズを越えないと説明しました。最大サイズを超えてしまうと、それ以上追加でデータを挿入したり更新ができなくなります。最大サイズを超えている時にデータの挿入、更新をしようとするとエラーがでます。以後、データの追加や削除をするには、データ容量を減らす必要があります。
最大サイズを指定していても、データの更新や追加の頻度が激しい場合は、設定した最大サイズを越えてデータを格納できてしまいます。データの使用量が設定した最大サイズを超えているかどうかはリアルタイムには確認されず、数分起きにデータ使用料が超えていないかの確認をし、一度超えていることを検知すると以後はエラーになります。
データをループで大量投入するサンプルデータを格納するストアドプロシージャーを同時に10本動かして実験をすると、最大サイズ1GBのWebエディションの設定でも5.5GBまでデータを格納できました。が、以後はエラーで格納できません。ですので、タイミングによっては、2GBなこともありました。
使用量が最大サイズを超えていることが確認されると、その段階で動いている更新クエリ(接続)は強制切断されます。再度、更新しようとすると40544エラーが発生します。(下参照)
Msg 40544, Level 20, State 5, Line 1
The database has reached its size quota. Partition or delete data, drop indexes, or consult the documentation for possible resolutions. Code: 524289
強制切断の場合のエラー
Message 10054、Lebel 20、State 0、Row 0
サーバーから結果を受信しているときに、トランスポート レベルのエラーが発生しました。
(provider: TCP プロバイダ, error: 0- 既存の接続はリモート ホストに強制的に切断されました。)
課金の仕様
ここまで、SQL Azureデータベースのエディションと最大サイズの仕様について説明しました。最大サイズを指定していても、最大サイズを越えてデータを格納できる場合があるります。では、最大サイズを越えて、データを格納できてしまった場合、課金はどう対応されるのでしょうか。
Webエディションの1GB設定で、実際には5.5GBを使用している場合、課金はWebエディションの1GB?Businessエディションの10GB?のどちらでしょうか。
答えは、自分が設定したエディションと最大サイズに基づいて課金されます。
Webエディション最大サイズ1GBと設定していれば、課金もWebエディションの最大サイズ1GB用の課金しかされません。一時的に超えたとしても、超えた分で課金されることは無いようです。