Azure SQL Database (シングルデータベース)では、DTU(データベース トランザクション ユニット)によって料金が異なりますが、DB使用率が高い時間帯と低い時間帯の差異が大きい場合、利用料金が気になってしまう事もあるかと思います。
例えば、DB使用率の高い昼間は「S2」で運用し、DB使用率の低い夜間は「S1」で運用したい場合、Windowsマシンと PowerShell 、タスクスケジューラを使って自動化する事が可能です。
ただし、注意点もありますので、よく検証の上で導入判断を行う必要もあります。
1.注意点
データベースのDTUを変更する際には、データベースの接続は一時的に切断されてしまいます。よって、データベースのダウン(接続不可な状態)が通常許容できない場合は、頻繁にDTUの変更を実施する事は難しくなると考えられます。
本ページの記載内容を導入検討する際には、事前に十分な検証の上で、自己責任で導入判断をしていただくようお願いします。
2.Azure の Windows仮想マシンでPowerShell を使えるようにする
まずは、Microsoft Azure のWindows仮想マシンで、PowerShellを使える状態にします。
Microsoft Azure のWindows仮想マシンで PowerShell を使う方法 を参照してください。
3. PowerShell スクリプトを用意する
実行すると データベースのDTUを「S1」に設定するPowerShellスクリプトと、実行するとデータベースのDTUを「S2」に設定するPowerShellスクリプトを用意します。
ここでは、「C:\Data\SetAzureSQL_S1.ps1」を、DTUを「S1」に設定するPowerShellスクリプトとします。内容は下記のようになります。(詳細は、MSサイトをご確認ください。)
$SubscriptionId = "ef6xxxxx-xxxx-xxxx-xxxx-bfxxxxxxxxx" $ServerName = "k8fxxxxxxx" $DatabaseName = "FBRDB" $Edition = "Standard" $Level = "S1" Select-AzureSubscription -SubscriptionId $SubscriptionId $ServiceObjective = get-azuresqldatabaseserviceobjective -ServerName $ServerName -ServiceObjectiveName $Level $ScaleRequest = Set-AzureSqlDatabase -DatabaseName $DatabaseName -ServerName $ServerName -Edition $Edition -ServiceObjective $ServiceObjective -Force $ScaleRequest
DTUを「S2」に設定するPowerShellスクリプト「C:\Data\SetAzureSQL_S2.ps1」は下記のようになります。S1用のPowerShellスクリプトとの差異は「S1」を「S2」にしただけです。
$SubscriptionId = "ef6xxxxx-xxxx-xxxx-xxxx-bfxxxxxxxxx" $ServerName = "k8fxxxxxxx" $DatabaseName = "FBRDB" $Edition = "Standard" $Level = "S2" Select-AzureSubscription -SubscriptionId $SubscriptionId $ServiceObjective = get-azuresqldatabaseserviceobjective -ServerName $ServerName -ServiceObjectiveName $Level $ScaleRequest = Set-AzureSqlDatabase -DatabaseName $DatabaseName -ServerName $ServerName -Edition $Edition -ServiceObjective $ServiceObjective -Force $ScaleRequest
4.PowerShell でスクリプトを実行してみる
まず、変更対象のSQLデータベース(FBRDB)のDTUを、以下のコマンドで確認します。
PS C:\Users\testuser> Get-AzureSQLDatabase -ServerName "k8fxxxxxxx" -DatabaseName "FBRDB" Name : FBRDB CollationName : SQL_Latin1_General_CP1_CI_AS Edition : Standard MaxSizeGB : 250 MaxSizeBytes : 268435456000 ServiceObjectiveName : S2 ServiceObjectiveAssignmentStateDescription : Complete CreationDate : 2016/02/09 12:51:14 RecoveryPeriodStartDate : 2016/02/09 13:01:57 PS C:\Users\testuser>
DTUが「S2」である事が確認できます。
次に、「C:\Data\SetAzureSQL_S1.ps1」を実行します。DTUを「S2」から「S1」に変更する事になります。
PS C:\Users\testuser> C:\Data\SetAzureSQL_S1.ps1 PS C:\Users\testuser>
数秒待てば、実行が完了します。実際のDTU変更はもう少し時間が掛かります。以下に、DTU確認コマンドを数秒おきに実行した結果を乗せます。
まず、PowerShellスクリプトを実行した直後の状態は以下になります。
PS C:\Users\testuser> Get-AzureSQLDatabase -ServerName "k8fxxxxxxx" -DatabaseName "FBRDB" Name : FBRDB CollationName : SQL_Latin1_General_CP1_CI_AS Edition : Standard MaxSizeGB : 250 MaxSizeBytes : 268435456000 ServiceObjectiveName : S2 ServiceObjectiveAssignmentStateDescription : Pending CreationDate : 2016/02/09 12:51:14 RecoveryPeriodStartDate : 2016/02/09 13:01:57 PS C:\Users\testuser>
DTU(ServiceObjectiveName)が「S2」のままですが、ServiceObjectiveAssignmentStateDescriptionが「Pending」に変わりました。
数秒おいて、もう一度確認すると、下記のようになります。
PS C:\Users\testuser> Get-AzureSQLDatabase -ServerName "k8fxxxxxxx" -DatabaseName "FBRDB" Name : FBRDB CollationName : SQL_Latin1_General_CP1_CI_AS Edition : Standard MaxSizeGB : 250 MaxSizeBytes : 268435456000 ServiceObjectiveName : S1 ServiceObjectiveAssignmentStateDescription : Pending CreationDate : 2016/02/09 12:51:14 RecoveryPeriodStartDate : 2016/02/09 13:01:57 PS C:\Users\testuser>
DTU(ServiceObjectiveName)が「S1」に変わりました。ServiceObjectiveAssignmentStateDescriptionは「Pending」のままです。
数秒おいて、もう一度確認すると、下記のようになります。
PS C:\Users\testuser> Get-AzureSQLDatabase -ServerName "k8fxxxxxxx" -DatabaseName "FBRDB" Name : FBRDB CollationName : SQL_Latin1_General_CP1_CI_AS Edition : Standard MaxSizeGB : 250 MaxSizeBytes : 268435456000 ServiceObjectiveName : S1 ServiceObjectiveAssignmentStateDescription : Complete CreationDate : 2016/02/09 12:51:14 RecoveryPeriodStartDate : 2016/02/09 13:01:57 PS C:\Users\testuser>
DTU(ServiceObjectiveName)が「S1」で、ServiceObjectiveAssignmentStateDescriptionが「Complete」になりました。
DTUの変更処理が完了したと考えられます。
なお、DTUを「S1」から「S2」に変更するときも同じような処理推移となります。
5.タスクスケジューラに登録
PowerShellスクリプトの動作確認が出来たので、次は自動実行する為に、タスクスケジューラに登録します。
「S1へ変更用」、「S2へ変更用」の二つ作成します。
以下にポイント情報のみですが、記載します。
タブ | 項目 | 設定値 |
全般 | 名前 | DTU変更_S1 |
トリガー | 設定 | 実行スケジュールを設定 |
操作 | 操作 | プログラムの開始 |
プログラム | C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe | |
引数の追加 | -Command “.\SetAzureSQL_S1.ps1” | |
開始 | C:\Data |
以上になります。