In-Memory OLTP: Speicheroptimierte Tabellen mit SQL Server 2014 erstellen

In-Memory OLTP in SQL Server 2014 beschleunigt Datenbanken um das bis zu Zwanzigfache. Ein Einblick in die Erstellung speicheroptimierter Tabellen.

Anfang dieser Woche wurde SQL Server 2014 veröffentlicht, Microsofts Nachfolger des inzwischen bereits zwei Jahre alten SQL Server 2012. SQL Server 2014 ist in verschiedenen Versionen mit unterschiedlichem Funktionsumfang erhältlich und bietet zahlreiche Verbesserungen in Sachen Skalierbarkeit, Hochverfügbarkeit und Cloud-Integration. Eine weitere zentrale Neuerungen ist die In-Memory-OLTP-Engine (Online Transaction Processing), auch unter dem Codenamen „Hekaton“ bekannt.

Durch In-Memory OLTP ist es mit SQL Server 2014 möglich, in konventionellen relationalen Datenbanken speicheroptimierte OLTP-Tabellen zu erstellen. Diese Verbesserung gehört zu einer der wichtigsten in Bezug auf die Performance bei SQL Server 2014 und verspricht Leistungssteigerungen um das bis zu Zwanzigfache. In-Memory OLTP wird allerdings nur in den 64-Bit-Editionen der Enterprise- und Developer- sowie in der Test-Version zur Verfügung stehen. Für Produktivumgebungen kommt damit also lediglich die 64-Bit-Enterprise-Version in Frage.

Wie bei traditionellen Transaktionen bei Festplatten-basierten Tabellen sind die Transaktionen bei In-Memory optimierten OLTP-Tabellen vollständig atomar, konsistent, isoliert und dauerhaft – ACID (atomic, consistent, isolated, durable). In-Memory OLTP kann vor allem dann seine Stärken ausspielen, wenn es zu vielen gleichzeitigen Zugriffen kommt, da hier Datei-Strukturen genutzt werden, die komplett frei von Latches sind. Bei Performance-kritischen Pfaden kommt es damit also zu keinen Sperren für die Parallelitätssteuerung. Stattdessen wird ein Multi-Version Concurrency Control (MVCC) verwendet, das Semantiken zur Transaktions-Isolation zur Verfügung stellt und so Interferenzen zwischen den Transaktionen verhindert. Damit kann jeder Anwender-Prozess auf jede Reihe einer Tabelle ohne Latches, also Locks oder Sperren, zugreifen.

Die Kombination aus MVCC und Latch-freien Daten-Strukturen resultiert in einem System, in dem Anwender-Prozesse ohne  Wartezeit ausgeführt werden können. Zusätzlich werden in Transact-SQL geschriebene Stored Procedures, die mit speicheroptimierten Tabellen arbeiten, zu hocheffizientem Maschinen-Code kompiliert. Das maximiert die Laufzeit-Performance für bestimmte Workloads und Datenbank-Abfragen, weil der so generierte Maschinen-Code nur das enthält, was er zum Bearbeiten der Abfrage auch wirklich benötigt. Laut Aussagen von Microsoft können manchen Applikationen alleine durch die Verwendung der In-Memory-OLTP-Engine in SQL Server 2014 von einem Leistungszuwachs um das bis zu Zwanzigfache profitieren, ohne dass an den Datenbanken selbst sonst etwas geändert werden müsste.

Generell gibt es zwei Arten von speicheroptimierten OLTP-Tabellen: SCHEMA_AND_DATA und SCHEMA_ONLY. Bei Tabellen der ersten Art bleiben Schema und Daten auch dann bestehen, wenn der SQL Server abstürzt oder neu gestartet wird. Das ist vor allen Dingen für transaktionale OLTP-Applikation sinnvoll, bei der Sie nach einem Absturz oder einem Neustart keine Daten verlieren wollen. SCHEMA_ONLY dagegen eignet sich vor allem für das Staging von Datenbank-Applikationen, hier bleibt bei einem Absturz oder Neustart nur das Schema der Tabelle im Speicher, nicht aber die Daten.

Der Ratgeber für die Speicheroptimierung, der über das SQL Server Management Studio aufgerufen wird, hilft bei der Identifizierung und Migration von kompatiblen Tabellen in den Arbeitsspeicher. Zudem können damit Stored Procedures ausgewählt werden, die sich in hochperformanten Maschinen-Code kompilieren lassen.

So werden speicheroptimierte Tabellen mit SQL Server 2014 erstellt

Um speicheroptimierte Tabellen erstellen zu können, muss die Datenbank eine Datei-Gruppe MEMORY_OPTIMIZED_DATA besitzen. Eine entsprechende Dateigruppe kann mit folgendem Befehl erzeugt werden:

Im Anschluss führen Sie folgendes Statement aus, um der speicheroptimierten Datei-Gruppe Datenbank-Dateien hinzuzufügen:

Und hier folgt die allgemeine Syntax, um speicheroptimierte Tabellen zu erstellen:

Mit folgendem Code kann eine speicheroptimierte Tabelle innerhalb der Beispiel-Datenbank AdventureWorks 2012 erstellt werden:

In diesem Code-Beispiel ist der Parameter BUCKET_COUNT die Anzahl an so genannter Buckets, die innerhalb des Hash-Index erstellt werden sollen. Weitere Informationen zur korrekten Ermittlung der Bucket-Anzahl für Hash-Indexe finden Sie über die MSDN-Library.

Nachfolgend finden Sie zudem eine allgemeine Syntax, um eine nativ kompilierte Stored Procedure zu erstellen:

Der tatsächliche Code, der die Stored Procedure nativ kompiliert, sieht wie folgt aus:

Zu guter Letzt folgt hier noch der Beispiel-Code für eine nativ kompilierte Stored Procedure, die ich erstellt habe, um detaillierte Bestell-Informationen aus der Tabelle Sales.SalesOrderDeail_MemoryOptimized zu erhalten.

Die Grenzen von In-Memory OLTP

Speicheroptimierte Tabellen unterstützen nicht die komplette Bandbreite der SQL-Server- und Transact-SQL-Funktionen. Einige der nennenswerten Einschränkungen von speicheroptimierten Tabellen wären beispielsweise die fehlende Unterstützung für Sparse, IDENTITY und Computed Columns, DML-Trigger, FILESTREAM-Daten, Columnstore-gefilterte und Volltext-Indexe, ROWGUIDCOL-Option, FOREIGN KEY, CHECK und UNIQUE Constraints, TRUNCATE TABLE, MERGE, sowie DYNAMIC- und KEYSET-Cursors.

Speicheroptimierte Tabellen unterstützen beispielsweise auch die nachfolgenden Datei-Typen nicht: Datetimeoffset, geography, geometry, LOBs (varchar(max), image, XML, text und ntext). Eine komplette Liste mit allen nicht unterstützten Funktionen von SQL Server 2014 im Hinblick auf speicheroptimierte Tabellen findet sich erneut in der MSDN Library.

Über den Autor: Basit Farooq ist leitender Datenbank-Administrator, Trainer und technischer Autor. Er bringt mehr als ein Jahrzehnt an IT-Erfahrung in Sachen Entwicklung, technische Ausbildung und Datenbank-Administration hinsichtlich Plattformen mit Microsoft SQL Server mit sich.

Erfahren Sie mehr über Datenbanken

- GOOGLE-ANZEIGEN

ComputerWeekly.de

Close