SQL Azureを徹底活用

第9回 SQL Database Federationをスケールさせる

この記事を読むのに必要な時間:およそ 2 分

前回までで,Windows Azure SQL Databaseのスケールアウト機能であるSQL Database Federationの概念と,フェデレーションオブジェクトの作成/メンバーデータベースへの接続方法/フェデレーションテーブルの作成方法について説明しました。

今回は,メンバーデータベースを追加しスケールアウトさせる方法,メンバーデータベースを削除しスケールインさせる方法について説明します。さらにフェデレーションを使用することによる制限事項についても説明します。

フェデレーションを分割しメンバーデータベースを追加する

前回までの手順で,図1のようにデータベース内にフェデレーションオブジェクト(OrderFederation)を作成し,フェデレーションオブジェクトに所属するルートデータベースとメンバーデータベース1つが生成されました。メンバーデータベース内には,フェデレーションテーブル2つと参照テーブルを1つ作成しました。

図1 OrderFederationの状況

図1 OrderFederationの状況

OrderFederationのフェデレーションキーレンジ(範囲)は,MIN~MAXまでとなっておりメンバーデータベース1つ内にすべて含まれています※1)⁠これを10万で分割し,MIN~10万,10万~MAXの2つに分離させます。分離させる方法はTransact-SQLを発行する方法とSQL Azure管理ポータルを使用する方法の2通りあります。

※1)
MINとMAXの値は,フェデレーションを作成する際に指定したフェデレーションキーのデータ型INTの仕様に依存します。

SQL Azure管理ポータルでフェデレーションを分割する方法

SQL Azure管理ポータルにログインし,データベースの管理概要を表示します。管理概要画面にフェデレーション(OrderFederation)が表示されているので,選択するとフェデレーションの詳細が表示されます図2)⁠

図2 SQL Azure管理ポータルの管理概要

図2 SQL Azure管理ポータルの管理概要

フェデレーションの詳細を表示すると,フェデレーションメンバーが表示されます。メンバーを選択し「分割」を選択することで,メンバーデータベースを分割するフェデレーションキー区切りを指定できます。ここでは1000を入力し「分割」をクリックします図3)⁠

図3 SQL Azure管理ポータルでメンバーデータベースの分割

図3 SQL Azure管理ポータルでメンバーデータベースの分割

メンバーデータベースの分割が完了後,更新ボタンを選択すると図4のように,分割が完了したメンバーデータベースの状況が表示されます。以上で,MIN~1000,1000~MAXに分割できました。

図4 メンバーデータベースの状況

図4 メンバーデータベースの状況

Transact-SQLでフェデレーションを分割する方法

Transact-SQLで,同様にフェデレーションキーを1000で分割するには,ルートデータベースに接続しクエリ1を発行します。

クエリ1 フェデレーションメンバーの分割

USE FEDERATION ROOT WITH RESET
GO
ALTER FEDERATION [OrderFederation] SPLIT AT ([orderID] = 1000)
GO

フェデレーションの分割処理の実行状況を確認するには,sys.dm_federation_operationsを参照します。図5は,フェデレーションの分割を実行しているときの表示です。

図5 フェデレーションの分割処理状況

図5 フェデレーションの分割処理状況

フェデレーションの分割状況を確認するには,sys.federation_member_distributionsを参照します。図6は,フェデレーションの分割状況を表しています。MIN(-2147483648)~1000,1000~2000,2000~MAXで分割されていることを確認できます。

図6 フェデレーションの分割状況

図6 フェデレーションの分割状況

フェデレーションを分割した場合の影響

フェデレーションの分割処理をすると,オンラインで分割処理が進められます。分割処理が完了するまでは,処理する前のフェデレーションを使用し続けることができます。分割処理が完了した段階で,処理前のデータベースと処理後のデータベースが入れ替えます。入れ替え処理は,トランザクション制御されるので,分割処理が完了した段階までにコミットされたトランザクションが反映されます。

分割したフェデレーションに接続し,テーブル状況を確認すると図7のように分割前のテーブルスキーマを継承しています。

図7 スキーマの継承

図7 スキーマの継承

継承するのはテーブルスキーマだけでは無くデータも継承します。注文テーブルは,ID列とOrderName列を持ち,ID列をフェデレーションキーに指定したフェデレーションテーブルです。このテーブルに「50,test50」「1050,test1050」を登録し,1000でフェデレーションを分割すると,登録されているデータもデータがそれぞれ別々のメンバーデータベースにデータが分割されます。

フェデレーションテーブルは,フェデレーションキーに応じてデータも分割され範囲内に収まるデータのみが格納されます。フェデレーションテーブルに,フェデレーションキーの範囲外のデータを登録しようとすると次のエラーが発生します。

メッセージ 45022,レベル 16
A column insert or update conflicts with a federation member range. The statement was terminated.

参照テーブルは,フェデレーション分割すると全データが複製されます。

著者プロフィール

大和屋貴仁(やまとやたかひと)

Microsoft MVP for SQL Azure

2010年1月のWindows Azure正式リリース直後に,sqlazure.jpドメインを取得。ネタを探す日々ですので,SQL Azureで不明点があれば遠慮なくTwitterなどでご相談くださいませ。

Twitter:SQLAzureJP

URL:http://sqlazure.jp

コメント

コメントの記入