SQLDays 2018 in München – Nachtrag – Pause aka Restore

Im Rahmen meines Vortrages auf den SQLDays in München hatte ich versucht einen Workaround zu „Wie spare ich Geld? Ich droppe einfach die Datenbank!“… hierzu möchte ich gerne ein Update posten.
Aber der Reihe nach, denn erst einmal möchte ich mich recht herzlich bei der ppedv Event bedanken für die Einladung nach München, zum anderen bei den zahlreichen Teilnehmern, die meine Session besucht haben! Ich hoffe ihr habt alle etwas aus meiner Session mitgenommen und könnt diese Ideen und Anregungen in eurem Alltag umsetzen bzw integrieren.

Unsplash - Photo by kevin Xue - THANK YOU

Powershell – Workaround um Kosten zu sparen

In meiner Demo ist das Wiederherstellen nach dem „Drop Database“ leider fehlgeschlagen, so dass ich in meiner Demo nicht zeigen konnte wie man aus dem logischen SQL Server das gespeicherte „Last Deleted Database“ entnehmen kann, um daraus einen Restore zu erzeugen. Ich habe diese Code-Zeilen bisher immer nur einmal ausgeführt, also Demo-Umgebung frisch aufsetzen, die Skripte nur auf Syntax überprüfen und hoffen das alles gut geht 😉 Dieses mal hatte ich meine Skripte eben doch einmal vorher ausgeführt, dadurch entstand schon ein Eintrag für „DeletedDatabases“… und somit gab es eben mehr als einen Eintrag und der Restore wußte nicht auf welches Datum er zurück gehen sollte…

# Do not continue until the cmdlet returns information about the deleted database.
if(![string]::IsNullOrEmpty($deleteddatabase)) {
Write-Host "Now restoring database $databasename_backup ..." -foregroundcolor "DarkYellow"
Restore-AzureRmSqlDatabase -FromDeletedDatabaseBackup `
-ResourceGroupName $resourcegroupname `
-ServerName $servername_backup `
-TargetDatabaseName $databasename_backup `
-ResourceId $deleteddatabase.ResourceID `
-DeletionDate $deleteddatabase.DeletionDate `
-Edition "Standard" `
-ServiceObjectiveName "S0"
}

Bin ich so bisher noch gar nicht drüber gestolpert, aber als ich dann nach der Session das Skript und den Output mir noch einmal angesehen habe…

SQLDays AzureSQLDB DeletedDatabases - Scriptproblem

Ich könnte mir vorstellen, dass es noch eine sichere oder sinnvollere Lösung gibt, aber als Ansatz bzw vorübergehende Lösung kann man das erst einmal so machen 😉
Es gibt zumindest zwei Möglichkeiten…

Möglichkeit 1

Aus meiner Sicht am einfachsten, aber unter Umständen nicht sicher, dass tatsächlich das Datum des letzten Löschvorganges übernommen wird, da das Skript zuvor keinen Einfluss auf die Sortierung der Ergebnisse nimmt.

# Do not continue until the cmdlet returns information about the deleted database.
if(![string]::IsNullOrEmpty($deleteddatabase)) {
Write-Host "Now restoring database $databasename_backup ..." -foregroundcolor "DarkYellow"
Restore-AzureRmSqlDatabase -FromDeletedDatabaseBackup `
-ResourceGroupName $resourcegroupname `
-ServerName $servername_backup `
-TargetDatabaseName $databasename_backup `
-ResourceId $deleteddatabase[0].ResourceID `
-DeletionDate $deleteddatabase[0].DeletionDate `
-Edition "Standard" `
-ServiceObjectiveName "S0"
}

Syntaktisches korrekt, funktioniert auf jeden Fall, ABER eben keine 100%ige Gewissheit, dass auch tatsächlich der gewünschte Zeitpunkt ausgewählt wird.

Möglichkeit 2

Etwas „umständlicher“, aber auf jeden Fall sicherer, denn wir wählen explizit das zu letzt hinzugefügte Datum aus.

# Do not continue until the cmdlet returns information about the deleted database.
if(![string]::IsNullOrEmpty($deleteddatabase)) {
Write-Host "Now restoring database $databasename_backup ..." -foregroundcolor "DarkYellow"
Restore-AzureRmSqlDatabase -FromDeletedDatabaseBackup `
-ResourceGroupName $resourcegroupname `
-ServerName $servername_backup `
-TargetDatabaseName $databasename_backup `
-ResourceId ($deleteddatabase.ResourceID | Select-Object -Last 1) `
-DeletionDate ($deleteddatabase.DeletionDate | Select-Object -Last 1) `
-Edition "Standard" `
-ServiceObjectiveName "S0"
}

Syntaktisches korrekt, funktioniert auf jeden Fall, ABER eben keine 100%ige Gewissheit, dass auch tatsächlich der gewünschte Zeitpunkt ausgewählt wird.

SQLDays-AzureSQLDB-DeletedDatabases-Script-optimized

Nun kann ich auch die SQLDays 2018 in München auf jeden Fall als Erfolg verbuchen, da ich wieder etwas an meinen Demos optimieren konnte und den Teilnehmern doch noch zeigen kann, wie dieses Skript funktioniert. In den nächsten Tage werde ich meine Demo-Skripte auf Github entsprechend aktualisieren, damit jeder davon profitieren kann!

Hier findet Ihr/sie nicht nur meine Skripte sondern auch meine Slides als PDF.

Skripte und Slides zu den SQLDays 2018 von SQL_aus_HH auf Github

Björn arbeitet in Hamburg als Datenbank-Administrator und Head of Competence für MS SQL und mySQL. Er nimmt regelmäßig an den PASS Regionalgruppen Treffen in Hamburg, den Veranstaltungen der PASS wie SQLSaturday und SQLGrillen teil und er organisiert in Hamburg das Azure Meetup. Er interessiert sich neben den Themen rund um den SQL Server, Powershell und Azure für Science-Fiction, Snowboarden, Backen 😉 und Radfahren.

Azure SQL Database – Hyperscale – jetzt im Public Preview

Auf der #MSIgnite wurde ein neues Feature bzw eine neue Variante von Azure SQL Database vorgestellt : Hyperscale!

Mit diesem neuen Produkt bietet Microsoft seinen Kunden eine Datenbank-Engine, welche schneller und flexibler auf plötzliche Daten-Wachstumsraten reagieren kann als die bisherigen. Mit Hyperscale kommen bisher bei on-premise SQL Servern unbekannte Technologien zum Einsatz, da diese sich erst realisieren ließen durch die Cloud-typische Trennung von Services, Netzwerk und Storage. Durch eben diese Trennung können neue Ansätz realisiert werden, welche – wie bei Azure SQLDB Hyperscale – neue Prozessstrukturen ermöglichen, hier wird nicht direkt in das Transaction-Log in einem Storage geschrieben, sondern erst einmal in einen Log-Services ähnlichem einer Queue im Servicebus. Dieser LogService übernimmt dann sozusagen die Verteilung der Daten in Richtung Storage, Secondary ComputeNodes und Page Servers.

Der Log-Service – Drehscheibe

AzureSQLDB Hyperscale PublicPreview - LogService

Der Log Service kümmert sich um die Datensicherheit, er ist dafür verantwortlich, dass die Daten sowohl für die Log-Sicherung also das Point-in-Time-Restore zur Verfügung stehen, als auch für die weitere Speicherung in den Compute Nodes sowie den Page Servern, aber wie im Detail…
Der Dateneingang auf dem Primary ComputeNode speichert jegliche Daten erst einmal auf einem Azure Premium Storage Device (welches schon dem Log-Service unterliegt), somit ist eine schnelle und sichere Speicherung der Daten sichergestellt. Der Log-Service nimmt diese Daten und verteilt sie dann an die Logsicherung (LTR & PiTR) und die weiteren ComputeNodes (some kind of LogShipping) und eben auch an die PageServer, welche die eigentliche Datenspeicherung übernehmen.

Der Datenspeicher – Page Server

AzureSQLDB Hyperscale PublicPreview - PageServers

Die Page Server übernehmen die Daten vom Log-Service um diese dann über spezielle Caching-Speicher auf lokale SSD-Platte zu speichern bzw später dann auf dem „normalen“ Azure Storage endgültig zu persitieren. Die PageServer sind im Grunde nichts anderes als die alt bekannten Datafiles auf einem on-premise SQL Server, denn auch die Datenbereitstellung in einer Hyperscale-Umgebung erfolgt über diese Page-Server, diese speichern nicht nur die Daten sondern stellen sie auch wieder zur Verfügung. Im Falle eines plötzlichen Datenwachstums können diese Page-Server sehr schnell und effizient skaliert werden, so dass zügig ein Vielfaches an Speicherplatz zur Verfügung gestellt werden kann.

Fazit – Azure SQL Database Hyperscale

Die Kombination und Trennung der einzelnen Funktionen machen einen sehr performanten Eindruck und lassen hoffen, dass sich diese Produkt am Markt etabliert. Auf jeden Fall ermöglicht es endlich Datenspeicherungen in der Cloud von mehr als 4-8 TB, welche bisher bei AzureSQLDB als Grenze galten. Manche Kunden bzw Solutions kommen eben leider nicht mit diesem „geringen“ Datenmengen aus… aber gerade die Trennung der Funktionen ermöglichen ein schnelles und flexibles Skalieren der Lösung, ob im Storage-Bereich oder bei den eigentlichen Compute-Nodes. So kann man mittels Hyperscale sehr flexibel und schnell auf wechselnde Anforderungen reagieren und entsprechend seine Datenbank-Umgebung anpassen und auch nur im Ansatz an Performance zu verlieren, da alle Funktionen von einander getrennt sind. Man kann die Speicherkapazitäten ohne Downtime variabel gestalten aber auch die Read-Compute-Nodes in Menge oder Größe varieren, so dass man z.B. auf einen Käuferansturm (mehr Lese-Operationen) schnell reagieren kann.

 

Mehr Informationen zu diesem neuen Public Preview und der Roadmap findet ihr wie immer im Microsoft Blog und den Dokumentationen.

https://azure.microsoft.com/en-us/blog/tag/azure-sql-database/

Dokumentation – Azure SQL Database

Beitragsfoto von Jon Tyson über Unsplash

Björn arbeitet in Hamburg als Datenbank-Administrator und Head of Competence für MS SQL und mySQL. Er nimmt regelmäßig an den PASS Regionalgruppen Treffen in Hamburg, den Veranstaltungen der PASS wie SQLSaturday und SQLGrillen teil und er organisiert in Hamburg das Azure Meetup. Er interessiert sich neben den Themen rund um den SQL Server, Powershell und Azure für Science-Fiction, Snowboarden, Backen 😉 und Radfahren.