Teilen über


Systemleistung bei speicheroptimierten temporalen Tabellen mit Systemversionsverwaltung

Gilt für: SQL Server 2016 (13.x) und höher Azure SQL-Datenbank Azure SQL Managed Instance

Dieser Artikel behandelt einige Überlegungen zur Systemleistung bei der Verwendung von speicheroptimierten Tabellen mit Systemversionsverwaltung.

Wenn Sie einer vorhandenen, nicht-temporalen Tabelle Systemversionsverwaltung hinzufügen, ergeben sich Leistungsauswirkungen auf Aktualisierungs- und Löschvorgänge, da die Verlaufstabelle automatisch aktualisiert wird.

Überlegungen zur Leistung

Jede Aktualisierung und Löschung wird in einer internen speicheroptimierten Verlaufstabelle verzeichnet. Es kann zu unerwartetem Arbeitsspeicherverbrauch kommen, wenn Ihre Workload diese beiden Vorgänge in großem Umfang verwendet. Aus diesem Grund legen wir Ihnen die folgenden Überlegungen nahe:

  • Führen Sie in einem Schritt keine umfangreichen Löschvorgänge aus der aktuellen Tabelle durch. Ziehen Sie in Betracht, die Daten in mehreren Batches zu löschen und zwischendurch die Datenleerung mithilfe von sp_xtp_flush_temporal_history oder bei SYSTEM_VERSIONING = OFF manuell zu veranlassen.

  • Führen Sie keine großen Tabellenaktualisierungen auf einmal durch, dies kann zu einem Speicherverbrauch führen, der doppelt so hoch wie für die Aktualisierung einer nicht-temporalen, speicheroptimierten Tabelle ist. Dieser Doppelter Speicherverbrauch ist temporär, da der Datenleerungstask regelmäßig ausgeführt wird, um den Speicherverbrauch interner Stagingtabellen in projizierten Grenzen in stabilen Zustand zu halten. Die Grenze beträgt 10 Prozent des Speicherverbrauchs der aktuellen temporalen Tabelle. Sie sollten massive Aktualisierungen in mehreren Batches durchführen, oder während SYSTEM_VERSIONING = OFF, wie bei der Verwendung von Aktualisierungen zum Festlegen der Standardwerte für neu hinzugefügte Spalten.

Der Zeitraum der Aktivierung der Datenleerung ist nicht konfigurierbar, Sie können aber sp_xtp_flush_temporal_history bei Bedarf manuell ausführen.

Sie sollten als Speicheroption für datenträgerbasierte Verlaufstabellen einen gruppierten Columnstore verwenden, insbesondere dann, wenn Sie beabsichtigen, Analyseabfragen für Verlaufsdaten auszuführen, die Aggregat- oder Windowingfunktionen verwenden. In diesem Fall ist ein gruppierter Columnstore-Index eine optimale Wahl für Ihre Verlaufstabelle. Gruppierte Columnstore-Indizes bieten eine gute Datenkomprimierung und verhalten sich einfügefreundlich, ausgerichtet an der Art der Generierung von Verlaufsdaten.