Zugreifen auf speicheroptimierte Tabellen mit interpretiertem Transact-SQL
Gilt für: SQL Server Azure SQL-Datenbank Azure Synapse Analytics Analytics Platform System (PDW)
Der Zugriff auf speicheroptimierte Tabellen ist bis auf einige Ausnahmen über beliebige Transact-SQL-Abfragen, DML-Vorgänge (SELECT, INSERT, UPDATE oder DELETE), Ad-hoc-Batches sowie über SQL-Module wie gespeicherte Prozeduren, Tabellenwertfunktionen, Trigger und Sichten möglich.
Interpretiertes Transact-SQL bezieht sich auf Transact–SQL-Batches oder gespeicherte Prozeduren, die keine systemintern kompilierten gespeicherten Prozeduren sind. Der Zugriff auf speicheroptimierte Tabellen mittels interpretiertem Transact-SQL wird als Interopzugriff bezeichnet.
Ab SQL Server 2016 (13.x) können Abfragen in interpretiertem Transact-SQL speicheroptimierte Tabellen parallel scannen, nicht nur im seriellen Modus.
Auf speicheroptimierte Tabellen kann auch mithilfe einer systemintern kompilierten gespeicherten Prozedur zugegriffen werden. Für leistungskritische OLTP-Vorgänge werden systemintern kompilierte gespeicherte Prozeduren empfohlen.
Interpretierter Transact-SQL-Zugriff wird für die folgenden Szenarien empfohlen:
Ad-hoc-Abfragen und Verwaltungsaufgaben
Berichtsabfragen, die in der Regel Konstrukte verwenden, die in nativ kompilierten gespeicherten Prozeduren nicht verfügbar sind (z.B. window -Funktionen, die auch als OVER -Funktionen bezeichnet werden).
Zum Migrieren leistungskritischer Teile der Anwendung zu speicheroptimierten Tabellen mit minimalen (oder ohne) Änderungen am Anwendungscode. Durch das Migrieren von Tabellen können u. U. Leistungsverbesserungen erzielt werden. Durch die anschließende Migration gespeicherter Prozeduren zu systemintern kompilierten gespeicherten Prozeduren lässt sich die Leistung möglicherweise weiter optimieren.
Wenn keine Transact-SQL-Anweisung für systemintern kompilierte gespeicherte Prozeduren verfügbar ist.
Die folgenden TransactSQL-Konstrukte werden in gespeicherten Prozeduren mit interpretiertem Transact-SQL, die auf Daten in einer speicheroptimierten Tabelle zugreifen, jedoch nicht unterstützt.
Bereich | Nicht unterstützt |
---|---|
Zugriff auf Tabellen | TRUNCATE TABLE MERGE (speicheroptimierte Tabelle als Ziel) Dynamische und KEYSET-Cursor (diese werden automatisch auf "statisch" herabgestuft). Zugriff aus CLR-Modulen mithilfe der Kontextverbindung. Das Verweisen auf eine speicheroptimierte Tabelle aus einer indizierten Sicht. |
Datenbankübergreifend | Datenbankübergreifende Abfragen Datenbankübergreifende Transaktionen Verknüpfte Server |
Tabellenhinweise
Weitere Informationen zu Tabellenhinweisen finden Sie unter Tabellenhinweise (Transact-SQL). Zur Unterstützung von In-Memory-OLTP wurde SNAPSHOT hinzugefügt.
Die folgenden Tabellenhinweise werden nicht unterstützt, wenn mit interpretiertem Transact-SQL auf eine speicheroptimierte Tabelle zugegriffen wird.
HOLDLOCK
PAGLOCK
READUNCOMMITTED
TABLOCKXX
IGNORE_CONSTRAINTS
READCOMMITTED
ROWLOCK
UPDLOCK
IGNORE_TRIGGERS
READCOMMITTEDLOCK
SPATIAL_WINDOW_MAX_CELLS = integer
XLOCK
NOWAIT
READPAST
TABLOCK
Wenn der Zugriff auf eine speicheroptimierte Tabelle von einer expliziten oder impliziten Transaktion mittels interpretiertem Transact-SQL erfolgt, müssen Sie mindestens einen der folgenden Schritte ausführen:
Geben Sie einen Tabellenhinweis auf die Isolationsstufe ein, z.B. SNAPSHOT, REPEATABLEREAD oder SERIALIZABLE.
Legt Sie die Datenbankoption MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT auf ON fest.
Ein Tabellenhinweis auf die Isolationsstufe ist bei speicheroptimierten Tabellen, auf die der Zugriff mit Abfragen im Autocommitmoduserfolgt, nicht erforderlich.