Azure SQL Database サーバーレス レベル: コンピューティング能力の自動スケーリング、料金とパフォーマンスのバランスの最適化


執筆者: Morgan Oslake (Principal Program Manager, Azure SQL Database)

このポストは、2019 5 17 日に投稿された Optimize price-performance with compute auto-scaling in Azure SQL Database serverless の翻訳です。

 

パフォーマンス目標の達成とコスト削減を両立するようにコンピューティング リソースを適切に割り当てるのは、容易なことではありません。使用パターンが複雑なデータベース ワークロードでは、特に難しい問題です。この問題に対応するために、マイクロソフトは Azure SQL Database の新しいコンピューティング レベルとして、サーバーレス レベルのプレビューを開始しました。このコンピューティング レベルでは、断続的に利用され使用状況を予測できないデータベースのコストとパフォーマンスのバランスを最適化しながら、パフォーマンス管理を簡素化することができます。使用パターンが適しているアプリケーションとしては、基幹業務アプリケーション、開発/テスト用データベース、コンテンツ管理、e コマース システムなどが挙げられます。また、アプリケーションに必要な演算能力の変化が激しい場合や、ワークロードを頻繁にスケーリングしてコストを削減したい場合にも適しています。サーバーレス レベルでは、フルマネージドでインテリジェンス機能が組み込まれている SQL Database のメリットを活用することができ、アプリケーション開発の迅速化、運用の簡素化、総コストの削減に効果的です。

コンピューティング能力の自動スケーリング

SQL Database サーバーレス レベルでは、ワークロードの要求に応じて Single Database のコンピューティング能力が自動スケーリングされます。コンピューティング料金は、実際に使われた時間に応じて 1 秒単位で計算されます。これに対して、SQL Database プロビジョニング済みコンピューティング レベルでは定額料金で一定量のコンピューティング リソースが割り当てられ、料金は 1 時間単位で計算されます。スケーリングされる時間が短い場合、プロビジョニング済みレベルのデータベースでは、ピーク時に対応するためにリソースが過剰にプロビジョニングされコストが大きくなるか、またはプロビジョニング量が不足してパフォーマンス低下のリスクを負うことになります。スケーリングされる時間が長い場合は、プロビジョニング済みコンピューティング レベルのデータベースでもスケーリングし直すことができますが、それには使用パターンが予測可能であるか、またはカスタム ロジックを作成してスケジュールやパフォーマンス メトリックに基づいて再スケーリング操作をトリガーする必要があります。このため、開発や運用が複雑になります。一方、サーバーレス レベルでは制限を構成してコンピューティング能力をスケーリングできます。これを管理しリソースを適切なサイズに維持する操作はサービス側で行います。また、使用時間外はデータベースを自動停止し、使用時間になると自動的に再開することもできます。

料金は実際にコンピューティング能力を使用した分のみ

SQL Database サーバーレス レベルのコンピューティング料金は、実際に使用した CPU とメモリの分だけ 1 秒単位で計算されます。データベース停止中はストレージ料金のみとなるため、コストを削減できます。

ここで、夜間はアイドル状態となり、日中はマルチコア ヘッドルームをフル稼働させる基幹業務アプリケーションや開発/テスト用データベースの場合について見てみましょう。サーバーレス レベルで自動停止と仮想コア最大 4 基までの自動スケーリングを構成したアプリケーションで 24 時間の使用状況を示すと、次の図のようになります。

Graph display of usage patterns for SQL Database serverless over a 24 hour period

ご覧のように、データベースの使用状況とコンピューティング料金が対応しています。料金は仮想コアの使用秒数によって決定され、この例では 24 時間でコア数と使用秒数の積が合計 46,000 となっています。サーバーレス レベルのデータベースのコンピューティング ユニット単価が仮想コア 1 基、1 秒あたり約 0.000073 ドルなので、上の例では 1 日あたりのコンピューティング料金はわずか 3.40 ドル以下となります。この料金は、使用した仮想コア数と使用秒数の積にコンピューティング料金の単価を掛けて計算されます。上記期間中、アイドル時はデータベースが自動停止され、バースト時には仮想コア 4 基が最大 80% まで使用されています。この間、ユーザーが操作を行う必要はありません。この例では、同様に仮想コア 4 基構成のプロビジョニング済みコンピューティング レベルのデータベースと比較すると、サーバーレス レベルを使用することで大幅に料金が削減されています。

なお、この料金はプレビュー期間中の割引料金です。この例は米国東部リージョンの 2019 5 月時点の料金に基づいており、予告なく変更される可能性があります。料金に関する最新情報は、Azure SQL Database の料金ページでご確認ください。

コストとパフォーマンスのトレードオフ

SQL Database サーバーレス コンピューティング レベルを使用する際には、コストとパフォーマンスのトレードオフについて考慮する必要があります。コンピューティング料金の単価と、使用量が少ない期間やアイドル期間後のコンピューティングのウォームアップによるアプリケーション パフォーマンスへの影響から、トレードオフが発生します。

コンピューティング料金の単価

サーバーレス レベルのデータベースは断続的な使用パターンのワークロードに最適化されているため、プロビジョニング済みレベルのデータベースと比較するとコンピューティング料金の単価が高くなっています。CPU やメモリの使用量が多く、使用時間も十分に長い場合、プロビジョニング済みコンピューティング レベルのほうがコストが低くなる場合があります。

使用量低下期間後のコンピューティングのウォームアップ

サーバーレス レベルのデータベースがオンラインの間に CPU やメモリの使用量が少ない期間が続くと、メモリが徐々に解放されます。ワークロードが再びアクティブになると、データ ページを SQL バッファ プールにリハイドレートするためにディスク IO が必要になったり、クエリ プランをコンパイルし直したりする必要があります。使用量低下時にキャッシュを解放するというメモリ管理ポリシーはサーバーレス レベル独自のもので、コスト削減には貢献しますがパフォーマンスに影響する可能性があります。使用量低下によるメモリ解放は Single Database やエラスティック プールのプロビジョニング済みコンピューティング レベルでは行われないため、それによる影響を受けることはありません。

停止後のコンピューティングのウォームアップ

サーバーレス レベルのデータベースをいったん停止してから再開した場合のレイテンシは、長くて 1 分程度で、その間はデータベースがオフラインになります。データベースを再開した後はメモリ キャッシュをリハイドレートする必要があり、最適なパフォーマンスが得られるようになるまでさらにレイテンシが発生します。パフォーマンスへの影響を抑えるために、自動停止するまでのアイドル期間の長さを構成することができます。また、この影響に敏感なワークロードについては、自動停止を無効化して自動スケーリングのみを利用することもできます。その場合、データベースがオンラインである間は使用の有無にかかわらず最低限のコンピューティング料金が発生するため、コストが増加します。

参照情報

Azure SQL Database サーバーレス コンピューティング レベルは、Single Database の汎用レベルでサポートされています。

Comments (0)

Skip to main content