web-dev-qa-db-ja.com

Azure SQL Databaseの自動スケーリング

データベースバックエンドにAzure SQLを使用するアプリケーションがあります。通常の負荷/条件下では、このデータベースはプレミアム1プランで正常に実行できます。ただし、早朝の時間帯に実行されるジョブにより、データベースの負荷が増大します。これらの数時間の間に、Premium 3プランに移行する必要があります。 Premium 3のコストは約8倍です。したがって、このプランを24時間年中無休で実行するコストを支払う必要はありません。

データベースを上下に自動スケーリングすることは可能ですか?クラウドサービスは、Azure Portalのインスタンス数を簡単にスケーリングできる方法を提供しますが、Azure SQLデータベースにはこのようなものはありません。これはAzure SDKを使用してプログラムで実行できますか?この件に関するドキュメントを見つけることができませんでした。

36
kspearrin

@ErikEJの答え(ありがとう!)の記事を掘り下げた後、以下を見つけることができました。これはElastic Sc​​aleプレビューのリリースで新たに公開されたようです。

データベースサービス層とパフォーマンスレベルの変更

次のREST APIも新たに利用可能になりました。これにより、データベースに対して必要なことをほぼすべて実行できます。

Azure SQLデータベースのREST API操作

そして、サービス層のスケーリングに関する私の最初の質問(例:P1-> P3-> P1):

データベースの更新REST API

これらの新しい開発では、クラウドサービスのように、Azure Portalで単純な構成として自動スケーリングも利用できるようになるのは時間の問題だと想定します。

18
kspearrin

別の方法として、Azureオートメーションを使用し、以下のRun Bookを使用します。

param
(
    # Desired Azure SQL Database edition {Basic, Standard, Premium}
    [parameter(Mandatory=$true)] 
    [string] $Edition,

    # Desired performance level {Basic, S0, S1, S2, P1, P2, P3}
    [parameter(Mandatory=$true)] 
    [string] $PerfLevel

)

inlinescript
{
    # I only care about 1 DB so, I put it into variable asset and access from here
    $SqlServerName = Get-AutomationVariable -Name 'SqlServerName'
    $DatabaseName = Get-AutomationVariable -Name 'DatabaseName'


    Write-Output "Begin vertical scaling script..."

    # Establish credentials for Azure SQL Database server 
    $Servercredential = new-object System.Management.Automation.PSCredential("yourDBadmin", ("YourPassword" | ConvertTo-SecureString -asPlainText -Force)) 

    # Create connection context for Azure SQL Database server
    $CTX = New-AzureSqlDatabaseServerContext -ManageUrl “https://$SqlServerName.database.windows.net” -Credential $ServerCredential

    # Get Azure SQL Database context
    $Db = Get-AzureSqlDatabase $CTX –DatabaseName $DatabaseName

    # Specify the specific performance level for the target $DatabaseName
    $ServiceObjective = Get-AzureSqlDatabaseServiceObjective $CTX -ServiceObjectiveName "$Using:PerfLevel"

    # Set the new edition/performance level
    Set-AzureSqlDatabase $CTX –Database $Db –ServiceObjective $ServiceObjective –Edition $Using:Edition -Force

    # Output final status message
    Write-Output "Scaled the performance level of $DatabaseName to $Using:Edition - $Using:PerfLevel"
    Write-Output "Completed vertical scale"
}


参照:
Azure Vertically Scale Runbook
スケールアップ/ダウンしたいときのスケジュールの設定。
私にとっては、入力パラメーター付きの2つのスケジュールを使用しました。1つはスケールアップ用、もう1つはスケールダウン用です。
助けてください。

12
Chinh Phan

はい、その機能は利用可能です:Azure SQL Database Elastic Sc​​ale

https://docs.Microsoft.com/en-gb/Azure/sql-database/sql-database-elastic-scale-introduction

12
ErikEJ

場合によっては、最も簡単なオプションは、SQLクエリを msdnで説明 として実行することです。

例えば:

ALTER DATABASE [database_name] MODIFY (EDITION = 'standard', SERVICE_OBJECTIVE = 'S3', MAXSIZE = 250 GB)
8
Lanorkin