Memory-Optimized Table
Eintrag zuletzt aktualisiert am: 18.10.2017
Die größte Neuerung in Version 2014 ist die unter dem Code-Namen „
Hekaton“ erstmal auf dem PASS Summit 2012 in Seattle angekündigte komplett neue
Storage-Engine, die Microsoft nun Extreme Transactional Processing (XTP) und In-Memory OLTP nennt.
XTP ermöglich als Alternative zu den herkömmlichen Tabellen nun auch sogenannte „speicheroptimierte Tabellen“ (Memory-Optimized Tables). Der primäre Speicherort dieser Tabellen ist das RAM des
Datenbankservers. Alle Lese- und Speicheroperationen finden primär im Hauptspeicher statt und sind entsprechend performant. Gleichwohl persistiert der
SQL Server eine Kopie der Daten auf dauerhaften Speichermedien. In speziellen Szenarien (z.B.
Sitzungszustand in Websites) besteht auch die Möglichkeit, komplett auf die Datenspeicherung auf Festplatte zu verzichten. Für solche „Schema-Only“-definierten Tabellen finden keine I/O-Operationen mehr statt.
Eine speicheroptimierte Tabelle erzeugt der Nutzer mit den Zusätzen CONTAINS MEMORY
OPTIMIZED_DATA beim Erstellen mit einer Filegroup und WITH (MEMORYOPTIMIZED=ON) beim Anlegen einer
Datenbanktabelle. Um auf diese Tabellen zuzugreifen, ist häufig keine Änderung in der Anwendung erforderlich. Bestehende SQL-Datenzugriffsanweisungen funktionieren wie bisher, solange die Tabellenstruktur sich nicht ändert. Eine Änderung der Tabellenstruktur kann aber notwendig sein, da nicht alle Datentypen und Eigenschaften beim In-Memory-OLTP verfügbar sind. Das gilt zum Beispiel für den
XML-Spaltentyp sowie die Geodaten-Typen GEOMETRY und GEOGRAPHY.
Solche speicheroptimierten Tabellen können auch für
Variablen in SQL-Skripten und als Tabellenwertparameter für Stored Procedures zum Einsatz kommen. Speicheroptimierte Tabellen bieten zwei neue Index-Typen:
Hash-Indexe und Range-Indexe, die auf einem Bw-Tree basieren. Eine spezielle Eigenart dieser beiden Index-Typen ist, das
SQL Server diese abseits ihrer Definition niemals auf der Festplatte speichert und somit das I/O-Subsystem wesentlich entlasten. Für weitere Optimierungen im I/O-Bereich sorgt der ausschließlich sequentielle Zugriff auf die neuen
Datenstrukturen – im Gegensatz zu dem sonst bekannten Random Access auf Datendateien. Das vereinfacht die Optimierung des darunterliegenden
Storagesystems wesentlich.
Verbesserungen in SQL Server 2017
Seit
SQL Server 2014 bietet
SQL Server sogenannte Memory-Optimized Tables. In
SQL Server 2017 nun kann der Entwickler hierbei auch berechnete Spalten verwenden. Auch die Verwendung der Funktion Is
JSON() in Constraints ist in Memory-Optimized Tables jetzt erlaubt, um durchzusetzen, dass eine Zeichenkettenspalte gültige
JSON-Daten enthält (siehe Listing).
n dieser Memory-Optimized Table ist Details
JSON eine
JSON-Spalte und AlleDaten eine berechnete Spalte:
CREATE TABLE [dbo].[Kunde](
[ID] [int] NOT NULL,
[Kundenname] [nvarchar](50) NULL,
[Datum] [datetime2](7) NULL,
[Details
JSON] nvarchar(4000),
AlleDaten AS concat_ws(';',[ID],[Kundenname],[DATUM]) PERSISTED,
CONSTRAINT [PK_Kunden] PRIMARY KEY NONCLUSTERED ([ID] ASC),
CONSTRAINT [Details
JSON should be formatted as
JSON]
CHECK (IS
JSON([Details
JSON])=1),
)
WITH (MEMORY_OPTIMIZED=ON )
GO