In-Memory OLTP (Arbeitsspeicheroptimierung)
Neu in SQL Server 2014 (12.x) kann In-Memory OLTP die Leistung der OLTP-Datenbankanwendung erheblich verbessern. In-Memory OLTP ist eine speicheroptimierte Datenbank-Engine, die in die SQL Server-Engine integriert ist und für OLTP optimiert ist.
Möchten Sie SQL Server 2016 testen? Registrieren Sie sich für Microsoft Azure, und wechseln Sie dann hier, um einen virtuellen Computer mit bereits installierter SQL Server 2016 zu starten. Sie können den virtuellen Computer löschen, wenn Sie fertig sind. |
Um In-Memory OLTP zu verwenden, definieren Sie eine Tabelle mit hohem Zugriff als speicheroptimiert. Speicheroptimierte Tabellen sind vollständig transaktional, dauerhaft und werden über Transact-SQL auf die gleiche Weise wie datenträgerbasierte Tabellen zugegriffen. Eine Abfrage kann sowohl auf speicheroptimierte Tabellen als auch auf datenträgerbasierte Tabellen verweisen. Eine Transaktion kann Daten in speicheroptimierten Tabellen und in datenträgerbasierten Tabellen aktualisieren. Gespeicherte Prozeduren, die nur auf speicheroptimierte Tabellen verweisen, können zur weiteren Leistungsverbesserung systemintern in Computercode kompiliert werden. Die In-Memory OLTP-Engine ist für extrem hohe Sitzungsparallelität für DEN OLTP-Typ von Transaktionen konzipiert, die von einer hochskalierten mittleren Ebene gesteuert werden. Um dies zu erreichen, werden Datenstrukturen ohne Latches, jedoch mit Multiversionsverwaltung und optimistischer Nebenläufigkeitssteuerung verwendet. Das Ergebnis ist eine vorhersehbare niedrige Latenz unter einer Millisekunde sowie ein hoher Durchsatz mit linearer Skalierung für Datenbanktransaktionen. Der tatsächliche Leistungszuwachs hängt von vielen Faktoren ab, jedoch kann mit Leistungsverbesserungen um das 5- bis 20-fache gerechnet werden.
In der folgenden Tabelle sind die Workloadmuster zusammengefasst, von denen die Verwendung von In-Memory OLTP am meisten profitieren kann:
Implementierungsszenario | Implementierungsszenario | Vorteile von In-Memory OLTP |
---|---|---|
Hohe Dateneinfügungsrate durch mehrere gleichzeitige Verbindungen | Hauptsächlich Nur anhängen-Speicherung Nicht in der Lage, mit der Einfügen-Arbeitslast Schritt zu halten |
Konfliktbeseitigung Reduzierung der Protokollierung |
Leseleistung und Skalierung mit periodischen Batcheinfügungen und -updates | Hochleistungs-Lesevorgänge, besonders wenn jede Serveranforderung mehrere Lesevorgänge ausführen muss Skalierungsanforderungen können nicht erfüllt werden |
Konfliktbeseitigung beim Eintreffen neuer Daten Niedrigere Latenz bei Datenabruf Minimierung der Codeausführungszeit |
Intensive Geschäftslogikverarbeitung im Datenbankserver | Einfügen, Aktualisieren und Löschen der Arbeitslast Intensive Berechnungsvorgänge innerhalb von gespeicherten Prozeduren Lese-/Schreibkonflikte |
Konfliktbeseitigung Minimierung der Codeausführungszeit für reduzierte Latenz und verbesserten Durchsatz |
Niedrige Latenz | Erfordert Geschäftstransaktionen mit niedriger Latenz, die typische Datenbanklösungen nicht erzielen können | Konfliktbeseitigung Minimierung der Codeausführungszeit Codeausführungszeit mit niedriger Latenz Effizienter Datenabruf |
Sitzungsstatusverwaltung | Häufige Einfügungen, Aktualisierungen und Punktsuchen Hohe Skalierungslast durch zahlreiche statuslose Webserver |
Konfliktbeseitigung Effizienter Datenabruf Optionale E/A-Reduzierung oder Eliminierung durch Verwendung von nicht dauerhaften Tabellen |
Weitere Informationen zu Szenarien, in denen In-Memory OLTP zu den größten Leistungssteigerungen führt, finden Sie unter In-Memory-OLTP – Allgemeine Workloadmuster und Migrationsüberlegungen.
Durch In-Memory OLTP wird die Leistung vor allem bei OLTP-Transaktionen mit kurzer Ausführungsdauer verbessert.
Programmiermuster, die In-Memory OLTP verbessert werden, umfassen Parallelitätsszenarien, Punktsuche, Workloads mit vielen Einfügungen und Updates sowie Geschäftslogik in gespeicherten Prozeduren.
Die Integration mit SQL Server bedeutet, dass Sie sowohl speicheroptimierte Tabellen als auch datenträgerbasierte Tabellen in derselben Datenbank haben und beide Tabellentypen abfragen können.
In SQL Server 2014 (12.x) gibt es Einschränkungen im Transact-SQL-Oberflächenbereich, der für In-Memory OLTP unterstützt wird.
In-Memory OLTP erzielt erhebliche Leistungs- und Skalierbarkeitsgewinne, indem Folgendes verwendet wird:
Algorithmen, die für den Zugriff auf arbeitsspeicherresidente Daten optimiert sind.
Optimistische Nebenläufigkeitssteuerung, die logische Sperren entfernt.
Sperren von freien Objekten, die alle physischen Sperren und Latches eliminieren. Threads, die Transaktionsaufgaben ausführen, verwenden keine Sperren oder Latches für die Parallelitätssteuerung.
Systemintern kompilierte gespeicherte Prozeduren, die beim Zugriff auf speicheroptimierte Tabellen deutlich bessere Leistung als interpretierte gespeicherte Prozeduren zeigen.
Wichtig
Um In-Memory OLTP verwenden zu können, sind einige Syntaxänderungen an den Tabellen und gespeicherten Prozeduren erforderlich. Weitere Informationen finden Sie unter Migrieren zu In-Memory OLTP. Bevor Sie versuchen, eine datenträgerbasierte Tabelle zu einer speicheroptimierten Tabelle zu migrieren, lesen Sie Ermitteln, ob eine Tabelle oder gespeicherte Prozedur in In-Memory OLTP portiert werden soll , um zu erfahren, welche Tabellen und gespeicherten Prozeduren von In-Memory OLTP profitieren.
In diesem Abschnitt
In diesem Abschnitt finden Sie Informationen zu den folgenden Konzepten:
Thema | BESCHREIBUNG |
---|---|
Anforderungen für die Verwendung speicheroptimierter Tabellen | Erläutert Hardware- und Softwareanforderungen und Richtlinien zum Verwenden von speicheroptimierten Tabellen. |
Verwenden von In-Memory-OLTP in einer VM-Umgebung | Behandelt die Verwendung von In-Memory OLTP in einer virtualisierten Umgebung. |
Codebeispiele für In-Memory OLTP | Enthält Codebeispiele, die das Erstellen und Verwenden einer speicheroptimierten Tabelle veranschaulichen. |
Speicheroptimierte Tabellen | Bietet eine Einführung in speicheroptimierte Tabellen. |
Speicheroptimierte Tabellenvariablen | Ein Codebeispiel, das veranschaulicht, wie eine speicheroptimierte Tabellenvariable anstelle einer herkömmlichen Tabellenvariable verwendet wird, um die Verwendung von tempdb zu reduzieren. |
Indizes für speicheroptimierte Tabellen | Bietet eine Einführung in speicheroptimierte Indizes. |
Nativ kompilierte gespeicherte Prozeduren | Führt systemintern kompilierte gespeicherte Prozeduren ein. |
Verwalten des Arbeitsspeichers für In-Memory-OLTP | Erläutert die Funktionsweise und Verwaltung der Speicherverwendung im System. |
Erstellen und Verwalten von Speicher für speicheroptimierte Objekte | Erläutert Daten- und Änderungsdateien, die Informationen zu Transaktionen in speicheroptimierten Tabellen speichern. |
Sichern und Wiederherstellen speicheroptimierter Tabellen | Erläutert die Sicherung und Wiederherstellung von speicheroptimierten Tabellen. |
Transact-SQL-Unterstützung für OLTP im Arbeitsspeicher | Erläutert die Transact-SQL-Unterstützung für In-Memory OLTP. |
Unterstützung für Hochverfügbarkeit für In-Memory OLTP-Datenbanken | Erläutert Verfügbarkeitsgruppen und Failoverclustering in In-Memory OLTP. |
SQL Server-Unterstützung für In-Memory OLTP | Listet neue und aktualisierte Syntax und Funktionen auf, die speicheroptimierte Tabellen unterstützen. |
Migrieren zu In-Memory OLTP | Erläutert, wie datenträgerbasierte Tabellen zu speicheroptimierten Tabellen migriert werden. |
Weitere Informationen zu In-Memory OLTP sind in folgenden Ressourcen verfügbar: