SQL Azure でのスケールアウト

更新日: 2010 年 11 月 19 日

作成者: Dinakar Nethi

テクニカル レビュー担当者: Cihan Biyikoglu、Michael Thomassy

Zip Fileダウンロード (XPS、543 KB | PDF、428 KB (もはや利用できます))


概要

SQL Azure Database は、マイクロソフトが提供するクラウド データベース サービスです。SQL Azure では、Web 接続型のデータベース機能をユーティリティ サービスとして提供します。SQL Azure のようなクラウドベースのデータベース ソリューションには、迅速なプロビジョニング、コスト効率に優れたスケーラビリティ、高可用性、および管理オーバーヘッドの削減といった多くのメリットがあります。このドキュメントでは、スケールアウト戦略、オンプレミス環境のスケールアウトにおける課題、SQL Azure でのスケールアウトがもたらすメリットについて概説します。

著作権について

このドキュメントは暫定版であり、ここに記載されているソフトウェアの最終的な製品版の発売時に実質的に変更される可能性があります。

このドキュメントに記載されている情報は、このドキュメントの発行時点における米国 Microsoft Corporation (以下、「マイクロソフト」) の見解を反映したものです。マイクロソフトは市場の変化に対応する必要があるため、このドキュメントの内容に関する責任をマイクロソフトは問われないものとします。また、発行日以降に発表される情報の正確性を保証できません。

このホワイト ペーパーは情報提供のみを目的としており、明示、黙示、または法令に基づく規定にかかわらず、これらの情報についてマイクロソフトはいかなる責任も負わないものとします。

お客様ご自身の責任において、適用されるすべての著作権関連法規に従ったご使用を願います。このドキュメントのいかなる部分も、米国 Microsoft Corporation の書面による許諾を受けることなく、その目的を問わず、どのような形態であっても、複製または譲渡することは禁じられています。ここでいう形態とは、複写や記録など、電子的な、または物理的なすべての手段を含みます。ただしこれは、著作権法上のお客様の権利を制限するものではありません。
マイクロソフトは、このドキュメントに記載されている内容に関し、特許、特許申請、商標、著作権、またはその他の無体財産権を有する場合があります。別途マイクロソフトのライセンス契約上に明示の規定のない限り、このドキュメントはこれらの特許、商標、著作権、またはその他の無体財産権に関する権利をお客様に許諾するものではありません。

© 2010 Microsoft Corporation. All rights reserved.

Microsoft、ADO.NET Data Services、Cloud Services、Live Services、.NET Services、SharePoint Services、SQL Azure、SQL Azure Database、SQL Server、SQL Server Express、Sync Framework、Visual Studio、Windows Live、および Windows Server は、Microsoft グループ各社の商標です。

その他、記載されている会社名および商品名は、各社の商標または登録商標です。

SQL Azure におけるスケールアウト

パーティション分割とは、データを小さなサブセットに分割して複数のデータベースに分散配置することで、高い管理性、可用性、拡張性を実現する技術です。データ規模の拡大が必要となった場合は、スケールアップとスケールアウトのいずれかを選択することができます。

スケールアップと比較してスケールアウトが最も優れている点は、複数のサーバーに負荷を分散して並列に処理させることで、スループットが向上し、より多くの作業に対応できるという点です。スケールアップには上限がありますが、スケールアウトは実質無制限に実行できます。アプリケーションの構築方法によっては、サーバーをプロビジョニングし、構成ファイルによって各サーバーの可用性を管理するスケールアウトを、ダウンタイムをほとんど発生させずに実現することができます。ハイ エンドなシステムにはホット アド メモリ/プロセッサというオプションがありますが、これには安全確保のためにダウンタイムが発生するのが一般的です。スケールアウト技術を採用したアプリケーションの成功例としては、eBay、Flickr、YouTube、Facebook などがあります。

1. パーティション分割の一般的な手法

パーティション分割にはさまざまな方法がありますが、大きく 2 つに分けて、行分割と、列分割があります。パーティション分割のメリットは広く認知されていますが、パーティション分割を適切に実装してそのメリットを引き出すには、ワークロードの性質を理解し、パーティション キーを慎重に検討しテストすることが必要です。

列分割:

この方法では、列数が少ない複数のテーブルにデータを分散します。正規化を行い、使用頻度が少ない列を別のテーブルに格納します。テーブルは、列数の少ない複数のテーブルに分割され、主キーと外部キーによって各テーブルがリンクされます。列方向のパーティション分割のもう 1 つの方法は、1 つのテーブル/エンティティを 1 つの独立したデータベースにすることです。大規模なテーブルが複数存在する場合、それらを別のデータベースに格納することは有効な対処法です。たとえば、顧客テーブル全体を別のデータベースに配置するのは、列分割の一形態です。通常、一意の行 ID (複数可) を持つすべてのテーブルの行が 1 つの行に再構成されます。たとえば、顧客の送付先住所が複数ある場合、テーブルをパーティション分割して、プライマリ住所を別テーブルに、セカンダリ住所をさらに別のテーブルに格納することができます。クエリの大部分はプライマリ住所テーブルに対して直接実行されます。すべての住所が必要になることはほとんどありません。

行分割:

キーに基づいてデータを複数テーブルに分散する手法で、SQL Server 2005 のデータベース パーティション分割と同じ手法です。マスター テーブルによってデータをパーティションにマッピングします。アプリケーションは、ユーザーが送信したクエリを元にマスター テーブルを照会して、要求されているデータがあるパーティションを特定し、該当するデータベースにクエリを転送します。行分割は、1 つのデータベース サーバー インスタンス内のデータに対して実行するのが一般的ですが、パーティションが複数のインスタンス間に分散される場合もあります。この場合、各パーティションを、物理的に異なるサーバー上の別のデータベースに配置できます。データベース スキーマは、すべてのパーティション間で保持されます。

一般的なオンライン ストアを例に考えてみましょう。各国の在庫情報はすべて 1 つのデータベースに格納できます。同様に、販売情報や顧客情報も国別に保管でき、国名がパーティション キーとなります。このケースでは、アルファベット順の国名リストをパーティション キーにすることも可能です。また、都道府県名をパーティション キーとして、さらにパーティション分割することができます。アプリケーションの種類とワークロードの性質によっては、抽出条件の組み合わせをパーティション キーにすることも検討できます。

一般に、データの正規化によりパフォーマンスを向上することができます。行方向のパーティション分割では、データの論理グループをまとめて格納しています。行方向のデータベース パーティション分割では、メリットを実現するために以下の点を考慮する必要があります。

  • 効率的なパーティション キー (複数可) の特定: コスト削減、データ取得の高速化/効率化、管理性の向上など、パーティション分割の本当のメリットを実現するには、適切なパーティション キー (複数可) を選択することが必須です。ただし、何がパーティション キーとして適切かは、業務の性質やワークロードの種類によって、アプリケーションごとに異なります。このため、アプリケーションとデータを十分に理解することが必要です。また、数値の範囲に基づくパーティション分割よりも、ナチュラルなパーティション キーを使用した方が多くのメリットが得られます。たとえば、ある販売アプリケーションで販売情報をパーティション分割する場合、販売 ID を使用するよりも地域ごとにパーティション分割した方が効率的です。また、一般に販売データは当期分を頻繁に使用するので、日付でパーティション分割すればより効果です。この場合、古い販売データは読み取り専用として、レポート用に使用されることになります。
  • パーティション管理: パーティション キーを決定した後に問題となるのは、パーティションを管理するアプリケーション層の設計です。アプリケーションは各パーティションとそのデータ分散状況を正しく認識できなければなりません。事業の成長やデータ容量要件の拡大に伴って新しいパーティションが割り当てられますが、ゼロ ダウンタイムまたは最低限のダウンタイムで、パーティションの有効化/無効化の切り替えを迅速かつシームレスに管理することが求められます。また、選択したパーティション キー次第で、新しいパーティションの追加時に、ダウンタイムを伴うデータの再割り当てが必要になる場合があります。
  • 複数データベース間の結合を避ける: 参照整合性を適用し、インスタンスをまたがったデータ結合を行うと、パーティション分割の効率性は低下します。このため、複数パーティションに対するデータ クエリの実行を回避するようなアプリケーション設計が必要となります。複数のパーティションに格納されたデータが必要な場合、各パーティションのデータに対して個別かつ非同期のクエリを実行し、データをアプリケーション層に集約することで、スムーズな処理が実現します。
  • データベース パーティション分割は、ワークロードの変動が激しい業務にとって非常にメリットがあります。業務でハードウェア予算の年次計画では、ピーク時の使用パターンを考慮し、将来の成長を予期して余裕をもたせることが一般的ですが、ワークロードの変動性が高いと、使用されないハードウェアが増えることになります。データベース パーティション分割を行えば、ハイ エンドのマルチプロセッサ マシンよりも安価な汎用ハードウェアにデータベースを分散できます。使用率の増減に合わせてサーバーをプロビジョニング/撤去できるので、インフラストラクチャ投資の増大を回避できます。
  • 高可用性: 多数のデータベースやインスタンスにまたがってデータをパーティション分割すると、高可用性ソリューションの整備がほぼ不可欠となってきます。
  • 管理業務/管理のしやすさ: 複数サーバーによるオンプレミス環境のスケールアウトでは、セキュリティ更新、サーバーへの修正プログラム適用、サーバーごとの障害復旧計画など、すべてのサーバーを管理するにあたってさまざまな問題が発生します。

ページのトップへ

2. SQL Azure におけるスケールアウトのメリット

SQL Azure は、クラウドベースのリレーショナル データベース機能を提供する、Azure プラットフォームのサービスです。Microsoft SQL Server を基盤とする SQL Azure は、オンプレミスの SQL Server で利用できる機能のサブセットを提供します。SQL Azure は、マイクロソフトのクラウドにホストされる、高い可用性、拡張性を備えたマルチテナント データベース サービスです。

現在 SQL Azure は、Web Edition と Business Edition という 2 つのエディションが提供されています。最新の提供内容とそれぞれのデータベース サイズ上限については、価格情報を参照してください。SQL Azure ポータルから、1 サブスクリプションにつき 1 つの SQL Azure を作成できます。サーバーとデータベースのプロビジョニングも SQL Azure ポータルのユーザー インターフェイスを使用して行うことができます。

SQL Azure サーバーは、SQL Server のオンプレミス インスタンスとは異なり、物理サーバーではなく、複数のユーザー データベースを論理的にグループ化したものです。各 SQL Azure サーバーには読み取り専用の master データベースがあり、データベースの一覧を保持し、ログインやログインのアクセス許可レベルを追跡しています。master データベースには使用状況に関する情報も格納されます。

  • 高可用性の自動化: 複数インスタンスへの拡張を続けていくと、それぞれのインスタンスの各データベースで高可用性を維持することが非常に難しくなります。SQL Azure におけるスケールアウトのメリットは、プロビジョニングされたデータベースそれぞれで、フェールオーバーと高可用性が自動で実現されるという点にあります。SQL Azure は、ポータル経由または CREATE DATABASE コマンドによってデータベースがプロビジョニングされた時点で、ユーザー データベースのコピーを 3 つ作成します。これら 3 つのコピーは、Azure ポータルで選択したジオロケーション内の、物理的に異なるサーバー上に作成されます。SQL Azure サービスは、各コピー間のデータ レプリケーションを処理し、各コピーのデータが常に同期されている状態を維持します。1 つのノードでハードウェア障害が発生した場合は、SQL Azure によって冗長コピーへのフェールオーバーが自動実行されます。このフェールオーバーは、ユーザー アプリケーションに対して透過的に行われます。
  • SQL Azure における管理業務: オンプレミスでのスケールアウトでは、対象となるすべての SQL Server インスタンスを管理しなければならず、作業負担が大幅に増えてしまいます。SQL Azure では、物理的な管理と論理的な管理が切り離されており、サーバーへの修正プログラム適用、ハード ディスクやストレージの管理といった物理サーバー レベルの作業はマイクロソフトが担当し、データベース、ログイン、ユーザーの管理、クエリやインデックスの最適化といった論理部分の管理はお客様が担当します。データベース管理者の負担は、スキーマの作成、インデックスのチューニング、クエリの最適化、セキュリティ管理といった作業に限定されます。
  • プロビジョニング時の競合を回避: 拡張が必要になった場合、できるだけ短時間で追加のデータベースをセットアップし、アプリケーションで利用できる状態にまで整えなければなりません。SQL Azure の場合、物理サーバー レベルの管理はすべて SQL Azure に任せられるため、高可用データベースのプロビジョニングは非常に簡単です。アプリケーション用に新しいデータベースを作成して専用のパーティションに配置するといった作業もすぐに完了します。データベースはほんの数秒で作成され、スキーマや参照テーブルの更新も短時間で完了するので、すぐにユーザーに提供できます。同様に、データベースの削除も数秒しかかからず、マスター参照のマッピングも更新されるため、アプリケーションは利用可能なパーティションとマッピングの状況をリアルタイムで認識することができます。
    SQL Azure では、季節的な需要の増加または予期される需要の増加に伴い、短期間で数十~数百規模のアプリケーション データベースが必要になった場合も、データベースをシームレスに追加することができ、使用率が元に戻った時点で簡単に削除できます。SQL Azure が実現するこのスケールアウト機能によって、一時的な需要急増に対応するためにハイ エンド ハードウェアを購入する必要がなくなるという非常に大きなメリットが得られます。同時に、オンプレミスのスケールアウトでは不可避な、ハードウェア使用率の低下に伴うインフラストラクチャ コストの無駄を排除できます。

3. SQL Azure における課金

SQL Azure の価格体系は、「Windows Azure 価格情報」のページでご確認いただけます。SQL Azure では、スケールアウトによって発生するコストを正確に把握し、スケールダウンによるコスト削減額を正確に算出できます。お客様のデータベース数に応じた最新のコスト予測と使用料金についても、ポータルで簡単にご確認いただけます。

4. まとめ

データベースのパーティション分割は、パフォーマンス向上、拡張性強化、コスト削減に効果的ではあるものの、パーティション分割を適切に計画、導入するのは容易ではありません。アプリケーションによってナチュラルなパーティション分割が可能なものあれば、拡張性を確保するためにアプリケーションの再構築が必要になるケースもありますが、その場合もそれだけのメリットを得ることができます。SQL Azure プラットフォームでは、莫大なインフラ投資を行わずに、1 つか 2 つのアプリケーション データベースを数十 ~ 数百にシームレスにスケールアウトできます。使用パターンの変化に伴いスケールダウンした場合も、インフラ投資が無駄になることはありません。

ページのトップへ