Azure SQL DB – Elastic Database Poolについて

SQL Database Elastic Pool (Preview)に関しての情報は、だいたい以下のところで把握することができます。

今のところ一番詳細情報を公開しているのがIgnite 2015のセッション「Microsoft Azure SQL Database – New ISV Resource Pooling Model Drilldown: The What, Why and How」です。
続いて、料金体系と性能、実際の使用感に関して、われらがムッシュ金麦が書いているSEの雑記「Elastic Pool Preview を触ってみる その 1」です。
あとは、MSDNライブラリで情報公開されているみたいです。

Elastic Database Poolが必要な背景

アプリケーションの性能向上を目的として、複数のデータベースに分割することがあります。コスト最適化のためにデータベースの特性に応じて、それぞれのデータベースのサイズを決定します。
たとえば、マスターデータベースや普段あまり使用されない機能のためのデータベースは性能が低めのデータベースにし、負荷がかかりやすいデータベースは性能が高めのデータベースにします。(まぁ実際には、「SaaSアプリケーションを想定していて、テナント毎にデータベースを持ち、テナントの負荷別にDBの性能を選択する。普段、使用者が少ないテナントのデータベースに唐突にユーザーが集まってアプリケーションの性能が劣化してしまう」というのが想定しなおリオみたい)

しかし、次の図のようにたまに不幸なことが起こります。
各データベースの性能は問題ないのに、低めに設定していたデータベースに何らかの原因で急に負荷が高まると、そこが性能ボトルネックとなりアプリケーション性能に深刻な影響を与えることがあります。

a

 

そこで登場するのが、Elastic Database Poolです。
Elastic Database Poolでは、性能の下限と上限を選択し、突発的な負荷にも対応できるように柔軟な性能を得ることができます。

b

 

Elastic Database Poolの課金

Elastic Database Poolは、複数のデータベースでDTUを共有しようというモデルです。
ですので課金のキーポイントの1つがPoolに割り当てるeDTU(Elastic Database Througut Unit)に応じた課金です。
次に、Poolに格納するデータベース数に応じた課金です。データベースの個数に応じて課金されます。

つまり、Elastic Database Poolの料金は次の式で求められます。

227.46円/月/1eDTU × 共有するDTU(eDTU) + 128.52円/月/1DB × DB数

ドキュメントにも書かれていますが、通常のSQL DatabaseのDTUよりも、Elastic Database PooleのeDTUの法が価格単価は高くなっています。(200DTUが17340円で、200eDTUが45492円)

Elastic Database Poolと通常のデータベースを使ったときの料金比較

たまに100DTU近く使うけど、普段は低使用率のデータベースが複数個ある場合をシミュレーションします。

左上が1個のとき、右上が20個のデータベースでは黒線の使用率に収まっている(合計200eDTU)シミュレーション、左下が4個の時。それらをElastic Database PoolとSQL Databaseで料金比較したグラフ。

image

 

100DTUのデータベース1個と、200eDTU(DB1個)
100DTUのデータベース2個と、200eDTU(DB2個)
100DTUのデータベース3個と、200eDTU(DB3個)
100DTUのデータベース4個と、200eDTU(DB4個)
100DTUのデータベース10個と、200eDTU(DB10個)
100DTUのデータベース20個と、200eDTU(DB20個)
の料金をマッピングしたときのグラフです。

image

 

たまに、100DTUにはねるけど、ほとんどは低使用率のDBをたくさんかき集められたら、圧倒的にElastic Database Poolが有利。でも、DB数が少ないときには、個別に作ったほうが有利となる。

なので、SaaS利用が主体とマイクロソフトは考えている(MSDNドキュメントもメニューにSaaS developer Solutionって書いちゃうぐらい)。

Elastic Poolで登場する係数

次の図のようなサービス帯になっている。
現時点のPreviewで提供されているのは、Standardのみ。

image

Poolに格納できるDB数

1つのPoolに格納できるのは、最大100個まで。
でも、次の計算式が優先される。

選択したeDTU / データベース毎の最少DTU

たとえば、eDTUを400にし、データベース毎の最少DTUを20としたら、
400/20=20となり、20個のデータベースまで格納することができることになる。

The pool must have room for the database (cannot already contain the maximum number of databases). http://azure.microsoft.com/ja-jp/documentation/articles/sql-database-elastic-pool-portal/

DB毎の最少DTU

DB毎に設定する最少DTU。
これは格納できるDTU数に影響を与える係数となっている。

ここの設定値の推奨は、データベース毎の平均使用DTUに設定すべき。
設定すると、プール内のすべてのデータベースにDTUが付与される。

DB毎の最大DTU

推奨値は、データベースのピーク使用数を設定すべき。
たとえば、100個のデータベースの内、20%がピークで50DTU使用する場合、DB毎の最大DTUは50DTUを設定すればOK。そして、eDTUは1000にすればOK。

ストレージ

ストレージもElastic Database Poolで共有する。
1eDTUにつき1GB付与される。

ワーカー数とセッション数の制限

次の表のように制限があるので注意。

image

画面構成

プールのeDTU、プールのストレージ使用料

image

最大DTU数、平均DTU、最大DTUを確認することができる。

image

実際に使ってみよう!

われらがムッシュ金麦が書いているSEの雑記「Elastic Pool Preview を触ってみる その 1」で説明されているので、それで十分!

今後の計画

  • BasicとPremiumのサービス帯を準備する予定
  • プール毎に格納できるデータベース数は増やす予定
  • プール毎のストレージとDTU数は増やす予定
  • プールのデータベース作成と取り外しは、T-SQLで実施できるようにする予定
  • V11からV12のPoolに移行できるようにする予定