Verwenden Sie In-Memory-OLTP in Azure SQL Managed Instance, um die Leistung Ihrer Anwendung zu verbessern
Gilt für: Azure SQL Managed Instance
In-Memory OLTP kann verwendet werden, um die Leistung der Transaktionsverarbeitung, Datenerfassung und der vorübergehenden Datenszenarios zu verbessern. Die unternehmenskritische Dienstebene enthält eine bestimmte Menge an Max In-Memory OLTP-Speicher, einem Grenzwert, der durch die Anzahl der vCores bestimmt wird.
Befolgen Sie diese Schritte, um In-Memory-OLTP in eine vorhandene Datenbank in Azure SQL Managed Instance zu übernehmen.
Schritt 1: Identifizieren der zu In-Memory OLTP zu migrierenden Objekte
SQL Server Management Studio (SSMS) umfasst einen Bericht Übersicht der Transaktionsleistungsanalyse, den Sie für eine Datenbank mit einer aktiven Workload erstellen können. Der Bericht identifiziert Tabellen und gespeicherte Prozeduren, die für die Migration zu In-Memory OLTP geeignet sind.
So generieren Sie den Bericht in SSMS
- Klicken Sie im Objekt-Explorermit der rechten Maustaste auf den Datenbankknoten.
- Wählen Sie Berichte>Standardberichte>Übersicht der Transaktionsleistungsanalyse.
Weitere Informationen zur Bewertung der Vorteile von In-Memory-OLTP finden Sie unter Feststellen, ob eine Tabelle oder gespeicherte Prozedur auf In-Memory-OLTP portiert werden sollte.
Schritt 2: Erstellen einer vergleichbaren Testdatenbank
Nehmen Sie an, der Bericht zeigt, dass die Datenbank über eine Tabelle verfügt, für die eine Umwandlung in eine speicheroptimierte Tabelle von Vorteil wäre. Sie sollten diese Angabe zunächst zur Bestätigung testen.
Sie benötigen eine Testkopie der Produktionsdatenbank. Die Testdatenbank sollte dieselbe Dienstebene (Unternehmenskritisch) und vCore-Anzahl haben wie Ihre Produktionsdatenbank.
Um das Testen zu erleichtern, optimieren Sie die Testdatenbank wie folgt:
Stellen Sie eine Verbindung zur Testdatenbank her, indem Sie SQL Server Management Studio (SSMS) verwenden.
Um zu vermeiden, dass die Option
WITH (SNAPSHOT)
in Abfragen benötigt wird, setzen Sie die OptionMEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT
für die aktuelle Datenbank, wie in der folgenden T-SQL-Anweisung gezeigt:ALTER DATABASE CURRENT SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = ON;
Schritt 3: Migrieren von Tabellen
Sie müssen eine speicheroptimierte Kopie der Tabelle, die Sie testen möchten, erstellen und auffüllen. Zum Erstellen können Sie eine der folgenden Möglichkeiten wählen:
- Den praktischen Speicheroptimierungs-Assistenten in SSMS.
- Verwenden Sie T-SQL-Befehle.
Speicheroptimierungs-Assistent in SSMS
So verwenden Sie diese Migrationsoption:
Stellen Sie über SSMS eine Verbindung mit der Testdatenbank her.
Klicken Sie im Objekt-Explorer mit der rechten Maustaste auf die Tabelle, und wählen Sie Advisor für die Speicheroptimierung.
Der Assistent für den Ratgeber für die Tabellenspeicheroptimierung wird angezeigt.
Wählen Sie im Assistenten Migrationsüberprüfung (oder die Schaltfläche Weiter), um zu überprüfen, ob die Tabelle nicht unterstützte Features enthält, die in den speicheroptimierten Tabellen nicht unterstützt werden. Weitere Informationen finden Sie unter:
- Die Prüfliste für die Speicheroptimierung im Advisor für die Speicheroptimierung.
- Von In-Memory OLTP nicht unterstützte Transact-SQL-Konstrukte.
- Migrieren zu In-Memory OLTP.
Wenn die Tabelle nicht unterstützte Features enthält, kann der Ratgeber das aktuelle Schema und die Datenmigration für Sie ausführen.
Manuelles T-SQL
So verwenden Sie diese Migrationsoption:
- Verbinden Sie sich mit der Testdatenbank mit SSMS (oder einem ähnlichen Dienstprogramm).
- Rufen Sie das vollständige T-SQL-Skript für die Tabelle und ihre Indizes ab.
- Klicken Sie in SSMS mit der rechten Maustaste auf Ihren Tabellenknoten.
- Wählen Sie Skript für Tabelle als>CREATE in>Neues Abfragezeitfenster.
- Fügen Sie im Skriptfenster der Anweisung
CREATE TABLE
einWITH (MEMORY_OPTIMIZED = ON)
hinzu. - Wenn ein Index als CLUSTERED gekennzeichnet ist, ändern Sie ihn in NONCLUSTERED.
- Benennen Sie die vorhandene Tabelle mittels sp_rename um.
- Erstellen Sie die neue speicheroptimierte Kopie der Tabelle, indem Sie das bearbeitete
CREATE TABLE
-Skript ausführen. - Kopieren Sie die Daten mit
INSERT...SELECT * INTO
in Ihre speicheroptimierte Tabelle:INSERT INTO [<new_memory_optimized_table>] SELECT * FROM [<old_disk_based_table>];
Schritt 4 (optional): Migrieren gespeicherter Prozeduren
Das In-Memory-Feature kann auch eine gespeicherte Prozedur zur Verbesserung der Leistung ändern.
Aspekte bei systemeigen kompilierten gespeicherten Prozeduren
Für die T-SQL-WITH
-Klausel einer systemeigen kompilierten gespeicherten Prozedur sind folgende Optionen erforderlich:
- NATIVE_COMPILATION: bedeutet, dass alle Transact-SQL-Anweisungen in der Prozedur in nativen Code kompiliert werden, um eine effiziente Ausführung zu gewährleisten.
- SCHEMABINDING: Bezieht sich auf Tabellen, deren Spaltendefinitionen nicht in einer Weise geändert werden dürfen, die sich auf die gespeicherte Prozedur auswirkt, sofern Sie die gespeicherte Prozedur nicht löschen.
Ein systemeigenes Modul muss einen großen ATOMIC-Block zum Verwalten von Transaktionen verwenden. Es gibt keine Rolle für ein explizites BEGIN TRANSACTION
oder ROLLBACK TRANSACTION.
Wenn Ihr Code einen Verstoß gegen eine Geschäftsregel erkennt, kann er den atomischen Block mit einer THROW-Anweisung beenden.
In der Regel CREATE PROCEDURE für systemeigen kompilierte gespeicherte Prozeduren verwenden
In der Regel entspricht der T-SQL-Code zum Erstellen einer systemeigen kompilierten gespeicherten Prozedur folgender Vorlage:
CREATE PROCEDURE schemaname.procedurename
@param1 type1, ...
WITH NATIVE_COMPILATION, SCHEMABINDING
AS
BEGIN ATOMIC WITH
(TRANSACTION ISOLATION LEVEL = SNAPSHOT,
LANGUAGE = N'<desired sys.syslanuages.sysname value>'
)
...
END;
- Für
TRANSACTION_ISOLATION_LEVEL
ist SNAPSHOT der häufigste Wert für die systemeigen kompilierte gespeicherte Prozedur. Eine Teilmenge der anderen Werte wird jedoch ebenfalls unterstützt:- REPEATABLE READ
- SERIALIZABLE
- Der
LANGUAGE
-Wert muss in der Ansichtsys.syslanguages
in der Spaltename
vorhanden sein. Beispiel:N'us_english'
.
Migrieren einer gespeicherten Prozedur
Die Migrationsschritte sind wie folgt:
- Rufen Sie das
CREATE PROCEDURE
-Skript für die regulär übersetzte gespeicherte Prozedur auf. - Schreiben Sie ihren Header entsprechend der vorherigen Vorlage neu.
- Stellen Sie fest, ob der T-SQL-Code der gespeicherten Prozedur Features verwendet, die für systemeigen kompilierte gespeicherte Prozeduren nicht unterstützt werden. Implementieren Sie ggf. Problemumgehungen. Weitere Informationen finden Sie unter Migrationsprobleme für nativ kompilierte gespeicherte Prozeduren.
- Benennen Sie die alte gespeicherte Prozedur mithilfe von sp_rename um. Oder löschen Sie sie einfach (DROP).
- Führen Sie Ihr bearbeitetes
CREATE PROCEDURE
T-SQL-Skript aus.
Schritt 5: Ausführen der Workload im Test
Führen Sie eine Workload in der Testdatenbank aus, die der Workload ähnelt, die in der Produktionsdatenbank ausgeführt wird. Dies sollte den Leistungsgewinn zeigen, den Sie mit der Verwendung des In-Memory-Features für Tabellen und gespeicherte Prozeduren erzielen.
Wichtige Attribute der Workload sind:
- Anzahl gleichzeitiger Verbindungen.
- Lese-/Schreib-Verhältnis.
Zum Anpassen und Ausführen der Testworkload empfiehlt Sie praktische Tool „ostress.exe“.
Um die Netzwerklatenz zu minimieren, führen Sie den Test in der gleichen geografischen Azure-Region aus, in der die Datenbank vorhanden ist.
Schritt 6: Überwachen nach der Implementierung
Sie sollten die Leistungseffekte Ihrer In-Memory-Implementierungen in der Produktion überwachen:
- Überwachen Sie die In-Memory-Speicherung.
- Überwachen Sie die Verwendung dynamischer Verwaltungssichten.