web-dev-qa-db-fra.com

Mise à l'échelle automatique de la base de données SQL Azure

Nous avons une application qui utilise Azure SQL pour le backend de la base de données. Dans des conditions/charges normales, cette base de données peut fonctionner avec succès sur un plan Premium 1. Cependant, pendant les premières heures du matin, nous avons des travaux qui augmentent la charge de la base de données. Pendant ces quelques heures, nous devons passer à un plan Premium 3. Le coût d'un Premium 3 est environ 8 fois plus élevé, donc nous ne voulons évidemment pas payer les frais de fonctionnement sur ce plan 24/7.

Est-il possible de mettre à l'échelle automatique la base de données de haut en bas? Les services cloud offrent un moyen simple de faire évoluer le nombre d'instances dans le portail Azure, cependant, rien de tel n'existe pour les bases de données SQL Azure. Cela peut-il être fait par programme avec le SDK Azure? Je n'ai pas pu trouver de documentation à ce sujet.

36
kspearrin

Après avoir fouillé les articles dans la réponse de @ ErikEJ (merci!), J'ai pu trouver ce qui suit, qui semble être nouvellement publié avec la sortie de l'aperçu d'Elastic Scale:

Modification des niveaux de service de base de données et des niveaux de performance

Les API REST sont désormais également disponibles, ce qui vous permet de faire à peu près tout ce que vous voulez dans vos bases de données:

Opérations de l'API REST pour les bases de données Azure SQL

Et pour ma question initiale de mise à l'échelle des niveaux de service (ex. P1 -> P3 -> P1):

Mettre à jour la base de données REST API

Avec ces nouveaux développements, je vais supposer que ce n'est qu'une question de temps avant que la mise à l'échelle automatique soit également disponible en tant que configuration simple dans le portail Azure, un peu comme les services cloud.

18
kspearrin

Une autre façon de le faire est d'utiliser l'automatisation Azure et d'utiliser le livre d'exécution ci-dessous:

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"
}


Réf:
Runbook Azure Verticalically Scale
Réglage de la planification lorsque vous souhaitez augmenter/réduire l'échelle.
Pour moi, j'ai utilisé 2 planifications avec des paramètres d'entrée, 1 pour l'augmentation d'échelle et une autre pour la réduction d'échelle.
J'espère que cette aide.

12
Chinh Phan

Oui, cette fonctionnalité est disponible: Azure SQL Database Elastic Scale

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

12
ErikEJ

Dans certains cas, l'option la plus simple peut être d'exécuter simplement une requête SQL sous la forme décrite dans msdn .

Par exemple:

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