Performance Optimierung von SQL Server Azure VMs

Performance Optimierung von SQL Server Azure VMsDie 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 …

Start-Typ des SQL Servers aus Manuell umstellen

… 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.

Startup-Skript hinzufügen (1)

Startup-Skript hinzufügen (2)

 



Verwendete Bildquellen:
© Armin Tost (AT) / pixelio.de

Check Also

Time Machine Backups nach Microsoft Azure

Seit einigen Jahren verwende ich eine Apple Time Capsule, um meine Time Machine Backups an einem zentralen Ort speichern zu können. Bislang hatte das für mich auch vollkommen ausgereicht. Seitdem ich jedoch immer mehr unterwegs bin, habe ich nach einer Lösung gesucht, die ich auch von unterwegs nutzen kann. In diesem Blog Post zeige ich deshalb, wie man Time Machine Backups nach Microsoft Azure machen kann.