Azure SQL Database サーバーレス (仮想コア ベース : 汎用目的) の場合、「最大仮想コア」、「最小仮想コア」を指定することが可能になっており、コンピューティング リソースを自動的にスケーリング (スケールアップ、スケールアウト) させることができます。
しかしながら、現時点 (2021年2月) において、ゾーン冗長性がサポートされておらず、ゾーン冗長性が必要な高可用性な環境を構成する場合、選択することが出来ません。
今回、ゾーン冗長性がサポートされている 「仮想コア ベース : Business Critical」、および、ゾーン冗長性は現在はプレビュー中ですが 「仮想コア ベース : 汎用目的」にたいして、Logic Apps を使用し、Azure SQL Database の CPU使用率に応じて、自動スケールアップ (仮想コア数を増加) する方法について、自分の整理も兼ねて、まとめてみようと思います。
[前提条件]
- Azure SQL Database (仮想コア ベース : 汎用目的) のデータベースが存在。
- Azure SQL Database - 「ファイアウォールと仮想ネットワーク」で「Azure サービスおよびリソースにこのサーバーへのアクセスを許可する」を「はい」に設定。
[実装内容]
1. ロジック アプリを作成
2. ロジック アプリ デザイナーよりトリガー、ステップを追加
- トリガー : 「繰り返し」 (Recurrence : 定期的にスケジュール実行)
- ステップ : 「SQL クエリを実行する (V2)」で Azure SQL Database の自動スケールアップ対象データベースへの接続設定、および、CPUの負荷状況に応じて Azure SQL Database をスケールアップ (仮想CPU) を実行するサンプルクエリを登録
Azure SQL Database 自動スケールアップ用 ロジック アプリ (Logic Apps) 作成
1) Azure ポータル - 「ロジック アプリ」を選択します。
2) 「+ 追加」-「Consumption」を選択します。
3) 「ロジック アプリ名」,「リージョン」に任意の値を入力後、「確認および作成」を選択し、ロジック アプリを作成します。
4) 3)で作成したロジック アプリ - 開発ツール - 「ロジック アプリ デザイナー」を選択します。
5) スケジュールで定期的にロジック アプリを実行させるため、トリガーに「繰り返し」を選択します。
6) 「間隔」,「頻度」(本例では 5分間隔に設定) および、必要に応じて「タイムゾーン」,「開始時刻」を入力後、「+ 新しいステップ」を選択します。
6) 「SQL Server」-「SQL クエリを実行する (V2)」を選択します。
7) 「接続名」,「認証の種類」,「SQL サーバー名」,「SQL データベース名」,「ユーザー名」,「パスワード」を入力後、「作成」を選択します。
- 認証の種類 : 「Azure AD Integrated」,「SQL Server 認証」,「Windows 認証」の何れかから選択。
- SQL サーバー名:Azure SQL Database サーバー名を指定。
- SQL データベース名 : 自動スケールアップ対象のデータベース名を指定。
- ユーザー名 : サーバー レベル プリンシパル ログイン (プロビジョニング プロセスで作成されるログイン), master の dbmanager データベース ロール、該当データベースの db_owerner データベース ロールが付与されたログインを指定。
8) 「Query」欄に 「Azure SQL Database 自動スケールアップ用サンプル クエリ」をペースト後、「保存」を選択します。
[サンプル クエリ]
1.「sys.dm_db_resource_stats」の「avg_cpu_percent」列の値を過去30分間分取得後、CPU使用率(%)の平均値を取得。
2. CPU使用率(%)の平均値が 98 より大きい場合、ALTER DATABASE コマンドにより、該当データベースの仮想コア数を変更。
※ サンプルクエリでは、Azure SQL Database (仮想コア ベース : 汎用目的) のデータベースを使用していることを前提に作成しています。
※ 仮想コア 2個 (GP_Gen5_2) から 4個 (GP_Gen5_4)、4個 (GP_Gen5_4) から 6個 (GP_Gen5_6)、6個 (GP_Gen5_6) から 8個 (GP_Gen5_8) へのスケール アップのみを実装しており、必要に応じてサンプルクエリを修正します。
「Azure SQL Database 自動スケールアップ用サンプル クエリ」 : スケールアップ対象のデータベースの過去30分間のCPU使用率(%)が閾値を超えた場合、 仮想コア数を増やす。
DECLARE @dbslo TABLE (DBName nvarchar(50), Edition nvarchar(50), Service_Obj nvarchar(50)); DECLARE @Service_Obj nvarchar(50) DECLARE @NextEdition nvarchar(50) DECLARE @NextService_Obj nvarchar(50) DECLARE @avgcpu int DECLARE @DBNAME nvarchar(50) DECLARE @QueryForAlter nvarchar(100) SELECT @avgcpu = ROUND(AVG(avg_cpu_percent),0) FROM sys.dm_db_resource_stats WHERE end_time > dateadd(minute,-30,getdate()) IF @avgcpu > 98 BEGIN INSERT INTO @dbslo SELECT db_name(), edition, service_objective from sys.database_service_objectives SELECT @DBNAME = DBName, @Service_Obj = Service_Obj, @NextEdition = Edition, @NextService_Obj = CASE WHEN Service_Obj = 'GP_Gen5_2' THEN 'GP_Gen5_4' WHEN Service_Obj = 'GP_Gen5_4' THEN 'GP_Gen5_6' WHEN Service_Obj = 'GP_Gen5_6' THEN 'GP_Gen5_8' ELSE Service_Obj END FROM @dbslo IF @Service_Obj <> @NextService_Obj BEGIN SET @QueryForAlter = N'alter database ' + @DBNAME + N' modify (edition = ''' + @NextEdition + N''', SERVICE_OBJECTIVE = ''' + @NextService_Obj + N''')' exec(@QueryForAlter) END END |
9) 「実行」を選択し、正常に ロジック アプリが動作することを確認します。
※ 今回の設定の場合、ロジック アプリのトリガーに「繰り返し」(Recurrence) を指定しているため、「開始時刻」に指定した日時以降、定期的に今回作成したロジック アプリが動作します。
Azure SQL Database 自動スケールアップ 動作確認方法
1) Azure ポータル - 「SQL データベース」を選択し、スケールアップ対象のデータベースの価格レベルが「汎用目的: Gen5、2 仮想コア」になっていることを確認します。
2) SQL Server Management Studio (SSMS) から Azure SQL Database サーバーの該当データベースにログインします。
3) 「新しいクエリ」で以下のクエリを実行し、CPU負荷テスト用ストアドプロシージャ「sp_cpuload」を作成します。
CREATE PROCEDURE [dbo].[sp_cpuload] AS BEGIN SET NOCOUNT ON; DECLARE @iCnt bigint; WHILE (1=1) BEGIN SET @iCnt = (SELECT count(*) FROM sys.dm_exec_requests) END END; GO |
4) 3) で作成した CPU負荷テスト用ストアドプロシージャ「sp_cpuload」を実行します。
exec sp_cpuload |
5) Azure ポータル - 「ロジック アプリ」 - 作成したロジック アプリ -「概要」を選択し、右ペインの「実行の履歴」を確認し、該当のロジック アプリが正常に動作したことを確認します。
6) Azure ポータル - 「SQL データベース」を選択し、スケールアップ対象のデータベースの価格レベルが「汎用目的: Gen5、4 仮想コア」になっていることを確認します。
※ 検証を実施する場合、一時的に ロジック アプリに登録した サンプル クエリ内容の変更 (CPU使用率の閾値など) 、および 「繰り返し」(Recurrence) の間隔を短くすることで、簡易に検証することが可能になります。
まとめ
今回は、 ゾーン冗長性がサポートされている 「仮想コア ベース : Business Critical」、および、現在はプレビュー中ですが 「仮想コア ベース : 汎用目的」にたいして、Logic Apps を使用し、Azure SQL Database の CPU使用率に応じて、自動スケールアップ (仮想コア数を増加) する方法についてまとめてみました。
次回は、Logic Apps + Azure SQL Database + Azure Private Link を使用したプライベート通信で同様の動作を実現することができるか、確認してみようと思います。