Azure SQL Database に新たなほぼリアルタイムのパフォーマンス メトリックを追加
このポストは、9 月 11 日に投稿された Azure SQL Database introduces new near real-time performance metrics の翻訳です。
最近、Azure SQL Database サービス レベル (Basic、Standard、Premium) が新しくなり、また新たなパフォーマンス レベルが導入されました。これに関連して、自社のデータベースのニーズに最適なサービス レベルを評価、決定する方法について、お客様から多くのご質問をいただいています。このような判断を合理化するため、Azure SQL Database に新たに動的な管理ビュー (DMV – sys.dm_db_resource_stats) を導入しました。このビューでは、リソース使用状況のデータをきめ細かくリアルタイムに確認できます。この新しい DMV の詳細と使用方法については、こちらの MSDN のドキュメント (英語) をご覧ください。この記事では、DMV で得られる情報を使用してお客様のデータベースのワークロードに適したパフォーマンス レベルをお選びいただくための、簡単な手順とガイドラインについて説明します。
適切なサービス レベルおよびパフォーマンス レベルの決定
1. お客様のアプリケーションやビジネスの要件で最低限必要となる機能を満たすサービス レベルを決定します。たとえば、バックアップの保持期間やデータベース全体のサイズなどのビジネス要件が判断基準となります (詳細についてはサービス レベル発表時のブログ記事を参照)。
2. 選択したサービス レベルの中で、まず最下位のパフォーマンス レベルでデータベースを作成します。たとえば、Standard サービス レベルを選択した場合、最初はパフォーマンス レベル S0 で作成します。
メモ: データベースのサービス レベルおよびパフォーマンス レベルは、Azure SQL Database のポータル ページから 1 クリックで変更できます。この操作は完全にオンラインで実行可能で、また変更操作時もデータベースは停止せず、稼動状態が保たれます。
3. アプリケーションの各ワークロードを最低 1 時間実行し、本番環境のデプロイメントで通常の状態のデータベース使用状況を取得します。
4. 新しい DMV の sys.dm_db_ resource_stats にクエリを発行し、直近 1 時間のリソース使用状況の情報を取得します。次に示すクエリは、データベースのリソース使用状況が、選択したパフォーマンス レベルによるリソース制限内に収まっていた時間の割合 (適合割合) を示します。データベースの負荷はパフォーマンス レベルの制限の 80% 以内が適正であると仮定しています。
SELECT
(COUNT(end_time) - SUM(CASE WHEN avg_cpu_percent > 80 THEN 1 ELSE 0 END) * 1.0) / COUNT(end_time) AS 'CPU Fit Percent'
,(COUNT(end_time) - SUM(CASE WHEN avg_log_write_percent > 80 THEN 1 ELSE 0 END) * 1.0) / COUNT(end_time) AS 'Log Write Fit Percent'
,(COUNT(end_time) - SUM(CASE WHEN avg_data_io_percent > 80 THEN 1 ELSE 0 END) * 1.0) / COUNT(end_time) AS 'Physical Data Read Fit Percent'
FROM sys.dm_db_resource_stats
データベースのサービス レベル目標 (SLO) に応じて、現在のパフォーマンス レベルがお客様のワークロードに適合しているかどうかを判断します。たとえば、データベースのワークロードの SLO が 99.9% で、上記クエリのリソースの 3 要素のうちいずれかがそれよりも低い値を返していた場合、1 つ上位のパフォーマンス レベルに変更するか、Azure SQL Database で実行しているアプリケーションを調整して負荷を低減させます。
メモ: 信頼性を高くするために 1 時間を超える期間のデータが必要な場合は、上記の DMV のクエリを 1 時間ごとに連続して実行し、他の場所 (ローカルのデータベースや Excel スプレッドシート) に保存します。他に、カタログ ビューの sys.resource_stats も使用できます。このビューでは、5 分間隔の平均という低い精度ながら、同様のデータを過去 14 日間分収集できます。
1. 上位のパフォーマンス レベルに変更することにした場合は、データベースをアップグレードした後、上記の手順 3 ~ 4 を再度実施します。
2. ワークロードで必要とされる SLO およびレイテンシを満たす適切なパフォーマンス レベルが判明した後も、この DMV を使用して定期的にリソース使用状況を監視できます。このリソース使用状況の情報とそれに関連するグラフは、Microsoft Azure ポータルでも表示できます。
データベースのワークロードがリソース制限に達した場合について
パフォーマンス レベルは、データベース ワークロードを、選択したサービス レベルおよびパフォーマンス レベルの制限内で実行するために必要なリソースを提供することを目的として、調整および管理されています。ワークロードが CPU、データ IO、ログ出力のいずれかの制限に達した場合、引き続き制限内の最大のリソースを使用することはできますが、クエリのレイテンシが増加する可能性が高くなります。この制限によりエラーが発生することはありませんが、ワークロードの速度が低下します。なお、これがさらに悪化してクエリのタイム アウトが発生するようになるとエラーが発生します。ユーザー セッションまたは要求 (ワーカー スレッド) の最大同時実行数の制限に達した場合、それ以上の接続や要求を処理しようとすると、明示的にエラーが示されます (MSDN のドキュメント (英語) を参照)。
Web Edition および Business Edition のデータベースの概要
新たに導入された DMV の sys.dm_db_resource_stats は、Web Edition および Business Edition のデータベースでは使用できませんが、sys.resource_stats ビューでマスター データベースのリソース使用状況を確認できます。Web Edition および Business Edition のデータベースでは、データベースに関して保証される DTU やリソース制限はないため、S2 パフォーマンス レベルのデータベースで使用可能なリソース量を基準としてパーセント単位で値が正規化されます。S2 レベルを基準とする DTU の使用状況の情報は、Web Edition および Business Edition のデータベースの現在の使用状況を新しいレベルのデータベースを基準に正規化し、どのレベルがお客様に適しているかを判断するうえで役立ちます。次に示すマスター データベースへのクエリは、Web Edition および Business Edition の DTU の平均使用状況を計算し、S2 データベースの DTU の能力を基準としてパーセント単位で表示します。
SELECT start_time, end_time,
(SELECT Max(v) FROM (VALUES (avg_cpu_percent), (avg_physical_data_read_percent), (avg_log_write_percent)) AS value(v)) as [avg_DTU_percent]
FROM sys.resource_stats where database_name = ‘<your db name>’ order by end_time desc
DTU の使用状況の値が 80% の場合、その DTU の使用状況は S2 データベースの制限の 80% に相当することを示しています。このビューの値が 100% を超える場合、S2 よりも上位のパフォーマンス レベルが必要であるということになります。
1 つの例として、この値が 300% を示しているとします。この場合、S2 で利用可能なリソースの 3 倍を消費していることになります。利用可能な DTU は、S2 で 50 DTU、上位のサイズの P1 では 100 DTU (S2 の 200%)、P2 では 200 DTU (S2 の 400%) です。これらを比較すると、S2 の 300% という値から、最初は P2 を選択し、その後テストを再度実施するとよいでしょう。
DTU の使用率から、お客様のデータベースに S2 のパフォーマンス レベルが適しているかを判断できます。また、DTU の使用率を各パフォーマンス レベルの相対的な DTU 能力 (MSDN のドキュメントを参照) と比較して、上位または下位レベルの適否を判断することも可能です。
メモ: 各パフォーマンス レベルの相対的な DTU 数は、Azure SQL Database のベンチマークのワークロードに基づいています。上記の計算式は Web Edition および Business Edition のデータベースを新しいサービス レベルに適用するためのガイドラインとして使用しているものであり、この計算結果は、データベースの実際のワークロードとは異なる可能性があります。実際にデータベースを新しいレベルに移行した場合は、前のセクションで説明した手順でワークロードのニーズに適したサービス レベルを検証し、調整を行ってください。