Die Virtuellen Maschine der D-Serie in Azure eigenen sich besonders gut für Anwendungen mit einer hohen Arbeitslast.
In diesem Blog Post möchte ich deshalb zwei kleine Optimierungen vorstellen, mit denen man bei SQL Server Azure VMs der D-Serie zusätzliche Performance rausholen kann…
Im September letzten Jahres hat Microsoft eine neue Reihe an »Azure Virtual Machines« vorgestellt, die besonderen Wert auf Performance legen. Diese D-Serien VMs bieten bis zu 112GB Arbeitsspeicher, bis zu 800GB lokalen SSD-Festplattenspeicher und Prozessoren die ca. 60% schneller sind als die der A-Serie.
Durch die lokale SSD, welche als D: Laufwerk in der Windows-VM zur Verfügung gestellt wird, kann man bei SQL Server Azure VMs zusätzliche Performance rauskitzeln.
Verschieben der tempdb-Datenbank
Eine Möglichkeit, diese SSDs zu auszunutzen, ist es die tempdb-Datenbank zu verschieben.
Hierzu richtet man 1-2 zusätzliche Verzeichnisse auf der SSD ein, wie beispielsweise D:\SQLData und D:\SQLLog, und weißt der tempdb-Datenbank den neuen Speicherort zu:
USE master; GO ALTER DATABASE tempdb MODIFY FILE (NAME = tempdev, FILENAME = 'D:\SQLData\tempdb.mdf'); GO ALTER DATABASE tempdb MODIFY FILE (NAME = templog, FILENAME = 'D:\SQLLog\templog.ldf');
Zum Prüfen der Änderung kann dann folgendes Skript genutzt werden:
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'tempdb');
Anschließend muss der SQL Server Dienst neu gestartet werden, damit die Änderung aktiv wird.
Buffer Pool Extensions
Eine weitere Möglichkeit kam mit dem SQL Server 2014 (Standard, Business Intelligence und Enterprise) hinzu.
Mit den Buffer Pool Extensions (BPE) nutzt der Buffer Pool der SQL Engine zusätzliche die SSD-Festplatte, um somit noch mehr Daten im Cache halten zu können.
Der Buffer Pool ist ein globaler In-Memory-Cache des SQL Servers, welcher Data-Pages zwischenspeichert, um somit die Lese-Leistung zu verbessern.
Zur Aktivierung der Buffer Pool Extension wird erneut ein Verzeichnis, wie beispielsweise D:\SQLCache, auf der SSD-Platte benötigt.
Anschließend kann mit folgendem Skript das BPE-Feature konfiguriert und aktiviert werden:
ALTER SERVER CONFIGURATION SET BUFFER POOL EXTENSION ON ( FILENAME = 'D:\SQLCache\SQLSERVER.BPE' , SIZE = <Gewünschte-Cache-Größe> [ KB | MB | GB ] );
Vorsicht beim Starten / Neustart der VM
Einen kleinen Wermutstropfen haben diese Änderungen allerdings.
Wenn die Virtuelle Maschine gestoppt und wieder gestartet wird, werden alle Daten auf der SSD gelöscht.
Dies wäre zwar kein Problem, da der SQL Server die Dateien wiederherstellen würde; Allerdings wird dies, durch die fehlenden Verzeichnisse, fehlschlagen.
Eine Möglichkeit dies zu umgehen ist ein Skript, das bei Starten des Computers ausgeführt wird.
Deshalb habe ich auf der Systemplatte ein Verzeichnis angelegt (C:\Scripts) und dort folgendes Skript (Dateiname SQLStartup.cmd) hinterlegt:
@echo off md D:\SQLCache md D:\SQLData md D:\SQLLog net start MSSQLSERVER net start SQLSERVERAGENT
Zusätzlich muss noch der Start-Typ des SQL Server Dienstes auf »Manual« umgestellt …
… und das neu erstellte Skript – als Startup-Script – in den Lokalen Gruppenrichtlinien hinzugefügt werden.
Zum Öffnen des Local Group Policy Editors kann in der Befehlszeile »gpedit.msc« eingeben.
Weitere Informationen:
Verwendete Bildquellen:
© Armin Tost (AT) / pixelio.de