Azure SQL Database におけるエラスティック プールを利用した複数のデータベースの管理およびスケーリング

適用対象: Azure SQL データベース

Azure SQL Database のエラスティック プールは、使用ニーズが多様で予測不可能な複数のデータベースを管理およびスケーリングするための、シンプルでコスト効率に優れたソリューションです。 エラスティック プール内のデータベースは、単一のサーバー上にあり、設定された数のリソースを設定価格で共有します。 SQL Database のエラスティック プールを使用すると、サービスとしてのソフトウェア (SaaS) の開発者は、各データベースのパフォーマンスに弾力性を持たせながら、データベース グループの価格に対するパフォーマンスを所定の予算内で最適化できます。

SQL エラスティック プールとは

SaaS 開発者は、複数のデータベースを持つ大規模なデータ層を基にしてアプリケーションを構築します。 アプリケーションの一般的なパターンでは、顧客ごとに単一データベースをプロビジョニングします。 しかし、各顧客の使用パターンは変動して予測不可能な場合が多く、各データベース ユーザーについてリソース要件を予測することも困難です。 これまでは、2 つのオプションがありました。

  • ピーク使用量および超過支払いに基づくリソースの過剰プロビジョニング。
  • ピーク時のパフォーマンスと顧客満足を犠牲にした、コスト削減のための過小プロビジョニング。

エラスティック プールは、データベースが必要なパフォーマンス リソースを必要なときに確保できるようにすることで、この問題を解決します。 また、予測可能な予算の範囲内でシンプルなリソース割り当てメカニズムが提供されます。 エラスティック プールを使用する SaaS アプリケーションの設計パターンについて詳しくは、「SQL Database を使用するマルチテナント SaaS アプリケーションの設計パターン」をご覧ください。

重要

エラスティック プールの料金は、データベース単位ではありません。 課金は、使用量や、プールがアクティブであったのが 1 時間未満かどうかといったことには関係なく、プールが存在する期間について 1 時間ごとに、最高の eDTU または仮想コア数で行われます。

エラスティック プールを使用することで、複数のデータベースで共有されるプールのリソースを購入でき、個々のデータベースの使用期間が予測しづらい場合にも対応できます。 DTU ベースの購入モデルまたは 仮想コアベースの購入モデルのいずれかに基づいて、プールのリソースを構成できます。 プールのリソース要件は、そのプールの使用量の合計によって決まります。

プールで使用可能なリソースの量は、予算に応じて決められます。 行う必要があるのは次のことだけです。

  • データベースをプールに追加します。
  • 必要に応じて、DTU または仮想コア購入モデルで、データベースの最小および最大リソースを設定します。
  • 予算に基づいてプールのリソースを設定します。

プールを使用することで、リーン スタートアップの段階から成熟企業の段階まで、サービスをシームレスに拡大し続けることができます。

プール内の個々のデータベースでは、設定されたパラメーターの範囲内でリソースを柔軟に使用できます。 負荷が大きい場合、データベースはリソースの使用量を増やして需要に対応します。 負荷が小さい場合、データベースはリソースの使用量を減らし、負荷がない場合は、リソースを使用しません。 Single Database ではなく、プール全体に対してリソースをプロビジョニングすることで、管理タスクの簡略化を実現します。 さらに、プールにかかる予算を予測することができます。

最小限のダウンタイムで、既存のプールにさらに多くのリソースを追加できます。 余分なリソースが不要になった場合は、いつでも既存のプールから削除できます。 プールのデータベースを追加または削除することもできます。 データベースのリソース使用率が低いと予想される場合は、プールから削除できます。

注意

エラスティック プールの内外にデータベースを移動するときは、操作の最後にデータベース接続が少しの時間 (数秒) 途絶えるのを除き、ダウンタイムは発生しません。

いつ SQL Database エラスティック プールを検討すると良いですか?

プールは、数多くのデータベースが特定の使用パターンで使用されている場合に適しています。 このパターンの特徴は、使用量が平均的に低く、特定のデータベースで急増することがあまりないことです。 逆に、中程度から高い使用率が持続する複数のデータベースは、同じエラスティック プールに配置しないようにする必要があります。

プールに追加できるデータベースが多ければ多いほど、節約量も多くなります。 アプリケーションの使用パターンにもよりますが、S3 データベースが 2 つあれば節約を実現できます。

以下のセクションでは、特定のデータベースのコレクションをプールに追加した場合にメリットがあるかどうかを評価する方法を確認できます。 例では Standard プールを使用していますが、他のサービス レベルのエラスティック プールにも同じ原則が適用されます。

データベースの使用パターンを評価する

次の図では、アイドル時間は長いが、定期的にアクティビティが急増するデータベースを示しています。 このような使用パターンは、プールに適しています。

プールに最適なシングル データベースを示すグラフ。

このグラフは、12:00 から 1:00 までの 1 時間の DTU 使用率を示し、各データ ポイントの単位は 1 分です。 12:10 の時点で、DB1 のピークは 90 DTU にも上りますが、全体的な平均使用量は 5 DTU 未満です。 単一データベースでこのワークロードを実行するには S3 コンピューティング サイズが必要ですが、このサイズでは、アクティビティの少ない期間にはほとんどのリソースは使用されません。

プールを利用すると、このような未使用の DTU を複数のデータベースで共有できます。 プールによって、必要な DTU と全体的なコストが削減されます。

前の例を踏まえて、DB1 と似た使用パターンのデータベースが他にもあるとします。 次に示す 2 つの図では、DTU ベースの購入モデルを使用して、時間が経過しても使用量のパターンが重ならないことを示すために、4 個のデータベースと 20 個のデータベースの使用量が同じグラフ上に重ねられています。

4 つのデータベースを示すグラフ。プールに最適な利用率パターンがあります。

20 のデータベースを示すグラフ。プールに最適な利用率パターンがあります。

前のグラフで、20 個のデータベースすべての DTU 使用量の合計は黒線で示されています。 この線は、DTU の合計使用量が 100 DTU を超えることはなく、20 個のデータベースでこの期間にわたって 100 eDTU を共有することが可能であることを示しています。 結果として、各データベースをコンピューティング サイズが S3 の単一データベースに配置したときと比較して、DTU は 20 倍、価格は 13 倍削減されます。

次の理由からこの例は理想的です。

  • 各データベースのピーク時の使用量と、平均使用量に大きな差があります。
  • 各データベースのピーク使用時間が異なります。
  • eDTU は、多くのデータベース間で共有されます。

DTU 購入モデルでは、プールの価格は、プール eDTU の機能を表します。 プールの eDTU 単価は単一データベースの DTU 単価の 1.5 倍ですが、プール eDTU は多数のデータベースで共有できるため、合計 eDTU は少なくて済みます。 これらの価格と eDTU 共有の特徴が、プールで節約を可能にするベースとなります。

仮想コアの購入モデルでは、エラスティック プールの仮想コアの単価は、単一データベースの仮想コアの単価と同じです。

正しいプール サイズを選択するにはどうすればよいですか?

プールに最適なサイズは、プール内のすべてのデータベースに必要な合計リソースに左右されます。 以下のこと確認する必要があります。

  • プール内のすべてのデータベースで使用される最大コンピューティング リソース数。 コンピューティング リソースは、購入モデルの選択に応じて、eDTU または仮想コアのいずれかによってインデックスが付けられます。
  • プール内のすべてのデータベースに使用される記憶域の最大バイト数。

各購入モデルのサービス レベルとリソース制限については、DTU ベースの購入モデルまたは仮想コアベースの購入モデルに関するページを参照してください。

プールのコスト効果が単一データベースよりも高いかどうかを確認するには、次の手順が役立ちます。

  1. プールに必要な eDTU 数または仮想コア数を見積もります。

    1. DTU ベースの購入モデルの場合:
      1. MAX(<DB の合計数 × DB あたりの平均 DTU 使用率>, <同時にピークとなる DB の数 × DB あたりのピーク DTU 使用率>)
    2. 仮想コアベースの購入モデルの場合:
      1. MAX(<DB の合計数 × DB あたりの平均 vCore 使用率>, <同時にピークとなる DB の数 × DB あたりのピーク vCore 使用率>)
  2. プール内のすべてのデータベースに必要なデータ サイズを追加して、プールに必要な合計記憶域スペースを見積もります。 DTU 購入モデルの場合は、この容量のストレージを提供する eDTU プール サイズを決定します。

  3. DTU ベースの購入モデルの場合は、ステップ 1 とステップ 2 の eDTU の見積もりのうち、大きい方を使用します。

    1. 仮想コア ベースの購入モデルの場合は、ステップ 1 の仮想コアの見積もりを使用します。
  4. 「SQL Database の価格」ページを参照してください。

    1. 手順 3 の見積もりより大きい最小のプール サイズを求めます。
  5. ステップ 4 のプールの価格と、単一データベースの適切なコンピューティング サイズを使用した場合の価格を比較します。

重要

プール内のデータベースの数がサポートされている最大数に近づく場合は、高密度エラスティック プールでのリソース管理を検討してください。

データベースごとのプロパティ

必要に応じて、データベースごとのプロパティを設定して、エラスティック プールでのリソース消費量のパターンを変更します。 詳細については、DTU仮想コア エラスティック プールのリソース制限に関するドキュメントを参照してください。

エラスティック プールで他の SQL Database 機能を使用する

エラスティック プールで他の SQL Database 機能を使用できます。

エラスティック ジョブとエラスティック プール

プールでは、 エラスティック ジョブ でスクリプトを実行することで、管理タスクが簡素化されます。 エラスティック ジョブを使用すると、大量のデータベースに関連する面倒な作業のほとんどが不要になります。

複数のデータベースを操作するための他のデータベース ツールについて詳しくは、SQL Database によるスケール アウトに関する記事をご覧ください。

Hyperscale Elastic Pool

Azure SQL データベースの Hyperscale Elastic Pool が一般提供されています。

エラスティック プール内のデータベースのためのビジネス継続性オプション

プールされたデータベースは、一般的に、単一データベースで使用できるのと同じビジネス継続性機能をサポートしています。

  • ポイントインタイム リストア: ポイントインタイム リストアは、自動データベース バックアップを使用して、プール内のデータベースを特定の時点に復旧します。 「ポイントインタイム リストア」をご覧ください。
  • geo リストア: geo リストアは、データベースがホストされているリージョン内のインシデントのためにデータベースが使用できない場合の既定の復旧オプションを提供します。 「geo リストア」を参照してください。
  • アクティブ geo レプリケーション: geo リストアが提供できるものよりアグレッシブな復旧要件があるアプリケーションの場合は、アクティブ geo レプリケーションまたはフェールオーバー グループを構成します。

上記の戦略の詳細については、「Azure SQL Database のディザスター リカバリー ガイダンス」を参照してください。

Azure portal を使用して新しい SQL Database エラスティック プールを作成する

Azure portal でエラスティック プールを作成する方法には次の 2 つがあります。

  • エラスティック プールを作成し、既存のサーバーまたは新しいサーバーを選択します。
  • 既存のサーバーからエラスティック プールを作成します。

エラスティック プールを作成し、既存のサーバーまたは新しいサーバーを選択するには:

  1. Azure portal に移動してエラスティック プールを作成します。 Azure SQL を検索して選択します。

  2. [作成] を選択し、[Select SQL deployment option](SQL デプロイ オプションの選択) ペインを開きます。 エラスティック プールに関する追加情報を表示するには、[データベース] タイルで [詳細の表示] を選択します。

  3. [データベース] タイルで、[リソースの種類] ドロップダウン リストから [エラスティック プール] を選びます。 [作成] を選択します。

    エラスティック プール作成のスクリーンショット。

  4. 次に、Azure portal、PowerShell、Azure CLI、REST API、または T-SQL を使用してエラスティック プールを管理します

既存のサーバーからエラスティック プールを作成するには:

  1. 既存のサーバーに移動し、[新規プール] を選択してそのサーバーで直接、プールを作成します。

    注意

    サーバーに複数のプールを作成することはできますが、同じプールに異なるサーバーからデータベースを追加することはできません。

    プールのエラスティックに使用できる機能のほか、各データベースに使用可能な最大リソース量が、プールのサービス レベルによって決定されます。 詳細については、DTU モデルでのエラスティック プールのリソース上限をご覧ください。 エラスティック プールに対する仮想コア ベースのリソース制限については、エラスティック プールでの仮想コアベースのリソース制限に関するページをご覧ください。

  2. プールのリソースと価格を構成するには、[プールの構成] を選びます。 そのため、サービス レベルを選択し、プールにデータベースを追加して、プールとそのデータベースに対するリソース上限を構成します。

  3. プールを構成した後、[適用] を選択し、プールの名前を指定し、[OK] を選択してプールを作成します。

  4. 次に、Azure portal、PowerShell、Azure CLI、REST API、または T-SQL を使用してエラスティック プールを管理します

エラスティック プールとプール内のデータベースの監視

Azure Portal では、エラスティック プールとそのプール内のデータベースの使用率を監視できます。 また、エラスティック プールに対して複数の変更を行い、すべての変更を同時に送信できます。 このような変更としては、データベースの追加または削除、エラスティック プールの設定の変更、データベース設定の変更などがあります。

組み込みのパフォーマンス監視およびアラート ツールと、パフォーマンス評価とを組み合わせて使用できます。 SQL Database では、監視を容易にするためにメトリックとリソース ログを出力することもできます。

お客様導入事例

  • SnelStart: SnelStart は、SQL Database とエラスティック プールを使用して、新しい SQL データベースを 1 か月あたり 1,000 台追加し、自社のビジネス サービスを急速に拡大しました。
  • Umbraco: Umbraco は、SQL Database とエラスティック プールを使用して、クラウド上の数千のテナント向けに迅速にサービスをプロビジョニングしてスケーリングしています。
  • Daxko/CSI: Daxko/CSI は、SQL Database とエラスティック プールを使用して、開発サイクルを迅速化し、顧客サービスとパフォーマンスを強化しています。