SQL Azure Team Blog

Microsoft SQL Azure Data Syncは、Microsoft Sync Frameworkテクノロジー上で構築されたクラウドベースのデータ同期サービスです。
双方向のデータ同期と、複数のデータセンターにあるSQL Azureデータベース間のデータを簡単にデータの整合性管理機能を提供します。現在のリリースは、コミュニティ テクニカル プレビュー 2(CTP2)です。

SQL Azure Data Syncの想定シナリオ

  • クラウドとクラウドの同期
  • エンタープライズ(オンプレミ)とクラウドの同期
  • エンタープライズとクラウドとエンタープライズの同期:オンプレミスのデータを他の遠隔地にあるオフィスと共有するのにクラウドを使用します

関連情報

SQL Azure Data Sync Wikiで、SQL Azure Data Syncの情報が大量に公開されています。wikiからリンクされているページを見ることで、SQL Azure Data Syncの全貌と実際の手順を把握することができると思います。

本家が、wikiで情報を更新していますので、見習って蒼の王座もwikiにてSQL Azure Data Syncの情報を発信していきたいと思います。

SQL Azure Data Sync – 蒼の王座 MSDN Library SQL Azre 日本語化

とりあえず、手始めにいくつかのページを意訳して公開しております。

が、気づいたのですが一番下のページを開いていただけば気づくかと思いますが、処理能力が追い付いていないので表示にえらい時間がかかっております(^^;
あまりにも負荷が高い場合は、Blogに再投稿するかもしれません。

元情報

本投稿は、Overview of SQL Azure DataSync – SQL Azure Team Blogを元にした投稿で、一部内容を変更しております。

SQL Azure

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用の課金しかされません。一時的に超えたとしても、超えた分で課金されることは無いようです。

SQL Azure

ユーザーごとに割り振られるSQL Azureサーバには、必ずmasterデータベースが含まれています。SQL Azureサーバーには、最大149個までデータベースを追加することができます。(ソフトウェア的な制御なので、マイクロソフトに連絡を取り、与信をクリアすれば制限を緩和することが可能)
データベースはSQL Azure Portalを使用して作成するか、Transact-SQL CREATE DATABASEコマンドで作成します。
SQL Server Management Studioでは、データベース作成をするためのGUIが提供されいません。 SQL Azureサーバーに接続して、クエリテンプレートを使用して、Transact-SQLを使用してデータベースを作成できます。SQL Server Management Studioでクエリテンプレートを開く為には、データベースを右クリックし、新しいデータベースをクリックします(図1)。

000003
図1:SQL Server Management Studioでの新規データベースの作成

SQL Azure

SQL Azureデータベースにユーザを追加する」で紹介したように、SQL Azureデータベースでも、ユーザーを追加することができます。

新規に追加したユーザーでSQL Azureデータベースに接続しようとすると、次のような「18453」エラーが出て接続できない人がいるかもしれません。

*****.database.windows.net に接続できません。

Login failed for user ‘******’.

This session has been assigned a tracing ID of ‘*******-0230-4743-a8c4-5fb532996fec’.  Provide this tracing ID to customer support when you need assistance. (Microsoft SQL Server、エラー: 18456)

000001

SQL Azure

SQL Azureのデータベース一覧の取得

select name from sys.databases

masterデータべーすを含めて、サーバに関連づけられているデータベース一覧を取得することができます。
データベースIDは、「database_id」カラムで取得可能。

SQL Azureデータベースのエディションと最大サイズ

select
DATABASEPROPERTYEX(‘test‘,’Edition‘),
DATABASEPROPERTYEX(‘test‘,’MaxSizeInBytes‘)

上記の例では、testデータベースのエディションと最大サイズを取得しています。
エディションは、「Web」か「Business」が返ってきます。
最大サイズは、「1073741824」、「5368709120」、「10737418240」、「21474836480」、「32212254720」、「42949672960」、「53687091200」、「NULL」が返ってきます。

参考:DATABASEPROPERTYEX (SQL Azure Database)

SQL Azureデータベースの現在サイズの取得

SELECT SUM(reserved_page_count)*8.0/1024 FROM sys.dm_db_partition_stats

データベースごとに実行する必要があります。戻り値は、メガバイト単位です。
masterデータベースに対して実行すると、「The user does not have permission to perform this action.」っとエラーが発生します。

参考:動的管理ビューを使用した SQL Azure の監視