2014-11-06 15 views
29

Wir haben eine Anwendung, die Azure SQL für das Datenbank-Backend verwendet. Unter normalen Bedingungen kann diese Datenbank erfolgreich auf einem Premium 1-Plan ausgeführt werden. In den frühen Morgenstunden haben wir jedoch Aufträge, die die Datenbankbelastung erhöhen. Während dieser paar Stunden müssen wir zu einem Premium 3-Plan übergehen. Die Kosten für eine Premium 3 sind ungefähr 8 mal höher, also möchten wir natürlich nicht die Kosten dafür bezahlen, dass sie rund um die Uhr auf diesem Plan laufen.Autoscaling Azure SQL-Datenbank

Ist es möglich, die Datenbank nach oben und unten zu skalieren? Cloud-Dienste bieten eine einfache Möglichkeit, die Anzahl der Instanzen im Azure-Portal zu skalieren. Für Azure SQL-Datenbanken ist jedoch nichts dergleichen vorhanden. Kann dies programmgesteuert mit dem Azure SDK erfolgen? Ich konnte keine Dokumentation zu diesem Thema finden.

Antwort

17

Nachdem durch die Artikel Graben in @ ErikEJ Antwort konnte ich folgendes finden, die erscheint werden neu mit der Veröffentlichung der Elastic-Skala Vorschau veröffentlicht:

Changing Database Service Tiers and Performance Levels

die folgenden REST-APIs sind jetzt neu auch zur Verfügung, die Sie ziemlich viel tun lassen was auch immer Sie Ihre Datenbanken wollen:

REST API Operations for Azure SQL Databases

Und für meine ursprüngliche Frage der Service-Ebenen (ex Skalierung. P1 -> P3 -> P1):

Update Database REST API

Mit diesen neuen Entwicklungen ich, es ist nur eine Frage der Zeit zu übernehmen werde, bevor die automatische Skalierung auch als einfache Konfiguration im Azure Portal, ähnlich wie Cloud verfügbar Dienstleistungen.

+0

Schade, die Service-Ziele sind nicht die einfache "P1 "Stilbezeichner, die Menschen kennen und verstehen.;) –

+0

Ja, das verstehe ich nicht wirklich, aber aus meinen Tests müssen Sie den Namen, die Edition und die ServiceObjectiveId (GUID) angeben, wenn Sie die Ebenen skalieren. – kspearrin

+4

@DavidPeden, machen Sie ein 'select * from slo_service_objectives' - das gibt Ihnen die Zuordnung zwischen objektiver ID und Namen wie" P1 "oder" S2 ". –

11

Ja, das Merkmal hat, ist verfügbar: (!) Danke Azure SQL-Datenbank Elastic Maßstab

https://docs.microsoft.com/en-gb/azure/sql-database/sql-database-elastic-scale-introduction

+5

Elastic Skala scheint nicht die automatische Skalierung zu tun, ist es für die Partitionierung/sharding Daten über mehrere Datenbanken. Für große Szenarien ist dies hilfreich, nicht für die Skalierung während des Tages. –

+0

@ErikO - nicht sicher, warum Sie das denken: http://azure.microsoft.com/en-us/documentation/articles/sql-database-elastic-scale- Elastizität/ – ErikEJ

+0

Wusste nicht über die vertikale Skalierung, danke! –

6

Eine weitere Möglichkeit, Azure Automatisierung zu tun, es verwendet, und führen Sie Buch unter Verwendung von:

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


Ref:
Azure Vertically Scale Runbook
Einstellung Zeitplan, wenn u nach unten/skalieren möchten.
Für mich verwendete ich 2 Zeitpläne mit Eingabeparametern, 1 für das Hochskalieren und ein weiteres für das Herunterskalieren.
Hoffe, dass Hilfe.

+2

Super! Diese Lösung beinhaltet etwas mehr Lesen (Lernen, wie man ein Automatisierungskonto erstellt, ein neues Asset (Credential), ein neues Runbook (dieses) und einen neuen Zeitplan. Aber es funktioniert wie ein Zauber. Danke! –

+1

Dies ist eine großartige Antwort, und können über das * Classic Azure Portal * erstellt werden. (1) Erstellen Sie ein Automatisierungskonto (2) Assets> Hinzufügen> Credential> PS-Credentials> {Your DB Admin Creds} (3) Importieren Sie das obige Runbook (folgen Sie dem Link und laden Sie zuerst)) (4) Um zu testen: Autor> Entwurf> Start, geben Credential Name von oben und andere params. (5) Wenn alles gut, veröffentlichen Runbook und erstellen Zeitplan (ziemlich selbsterklärend). – Dunc

+0

importiert das obige Runbook in der Galerie, funktioniert eine Leckerei. –

5

In einigen Fällen könnte die einfachste Möglichkeit darin bestehen, die SQL-Abfrage einfach als described in msdn auszuführen.

Zum Beispiel:

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