SQL Server 2016: Leistung der temporären Tabelle im Vergleich zu Triggern und CDC

7

Es scheint ziemlich schwierig zu sein, Vergleiche zwischen zeitversetzten Tabellen mit Systemversion und den älteren Optionen wie DB-Triggern und CDC zu finden. Ich habe derzeit keine Zeit, einen erweiterten Test für SQL Server 2016 zu schreiben, daher dachte ich, ich würde hier danach fragen.

Grundsätzlich besteht der typische Vorteil von Triggern darin, dass sie in eigenständigen und Clustered / AlwaysOn-Umgebungen einfacher zu verwalten sind, in Echtzeit synchronisiert werden können und Zugriff auf Sitzungsdaten wie die Benutzer-ID haben.

CDC hingegen erfordert zwar etwas mehr Verwaltung und ist asynchron, ist jedoch viel leichter und bietet daher eine weitaus bessere Leistung. Wenn also überhaupt Zweifel bestehen, dass das durch Auslöser verursachte Flaschenhals zu einem Problem werden könnte, ist CDC im Grunde die überlegene Lösung. In Bezug auf die Hardwareanforderungen stellt CDC einen vernachlässigbaren zusätzlichen Speicherplatzbedarf dar, da Protokolle und CDC-Prüftabellen zur Verfolgung der Änderungen verwendet werden.

Die Frage: Wie vergleichen sich Zeittabellen mit den beiden oben genannten? In Bezug auf Geschwindigkeit, Leistung und Speicherplatznutzung. WANN sollte ich Zeittabellen anstelle von Triggern oder CDC verwenden? Wann soll ich nicht

Ich verstehe alles, was so komplex sein kann wie die Geschäftsanforderungen und technischen Einschränkungen, die hinter der DB-Prüfung stehen, nicht einfach zu beantworten, da dies weitgehend von den Anforderungen und dem Umfang des Projekts abhängt. Aber alles, was mehr Licht auf die obigen Fragen werfen könnte, wäre willkommen. Vielen Dank!

Kahn
quelle

Antworten:

5

Dies hängt von Ihrem Geschäftsfall ab. Zeitliche Tabellen und die Erfassung von Änderungsdaten bieten unterschiedliche Funktionen.

Zeitliche Tabellen werden verwendet, um zu einem bestimmten Zeitpunkt eine Version Ihrer Tabelle bereitzustellen. Ein Anwendungsfall kann eine sich langsam ändernde Dimension sein, in der Sie die Änderungen der Dimensionsattribute verfolgen und von jedem Zeitpunkt an melden möchten.

Die Datenerfassung für Änderungen kann für eine OLTP-Tabelle verwendet werden, damit Sie den Export in einen Data Mart problemlos vereinfachen können. Es protokolliert alle Änderungen in einer separaten Tabelle, sodass Sie geänderte Zeilen seit Ihrem letzten Export-LSN-Punkt problemlos anzeigen können.

Andy Jones
quelle
Vielen Dank, aber ich bin immer noch am meisten an den technischen Leistungs- und Speicheranforderungen im Vergleich zu den anderen Lösungen interessiert, da sie mir die beste Vorstellung davon geben, wie ich sie auf die Geschäftsanforderungen dieses Falls anwenden kann.
Kahn
Aber sie haben wie gesagt ganz andere Anwendungsfälle. CDC verfolgt Datenänderungen, um sie beispielsweise an ein Data Warehouse zu senden. Die alten Daten sind in der Tabelle nicht mehr verfügbar. Zeittabellen werden verwendet, um den Zugriff auf alte Daten zu ermöglichen, beispielsweise in diesem Data Warehouse (das möglicherweise von CDC-erfassten Daten aktualisiert wird). Reposting-Systeme müssen häufig auf historische Datenkontexte zugreifen (geben Sie mir einen Risikobericht vom letzten Sonntag, Donnerstag - mit den Daten vom letzten Donnerstag). Zeittabelle. Änderungen aufzeichnen - CDC. Konzentrieren Sie sich auf die extremen Unterschiede in der Funktionalität.
TomTom
@Kahn Ich bin hier gelandet und habe nach Details über die Interna der temporären Tabellenspeicherung gesucht. Meine Hoffnung war, dass eine Art "Diff" durchgeführt wurde, ähnlich wie bei Versionskontrollsystemen, aber es scheint, dass Verlaufstabellen wie normale Tabellen gespeichert werden. Das einzige Detail zur Speicheroptimierung , das
John Mo
Temporale Tabellen sind ein Beispiel dafür, wo die Seitenkomprimierung einen großen Unterschied machen kann: Da die gesamte Zeile für jede Version gespeichert wird und die Änderungsmenge häufig gering ist, gibt es viele Möglichkeiten, durch Entfernen von Duplikaten Platz zu sparen. Selbst wenn sich alles ändert, werden alle Unicode-Zeichenfolgen komprimiert, was viel sparen kann. Beachten Sie, dass die Kompression nicht off-Seite berührt Werte überhaupt, so verwenden NVARCHAR(MAX)oder VARBINARY(MAX)(oder die ältere TEXT/ NTEXT/ IMAGE) kann machen zeitliche Tabellen verbrauchen große Mengen an Speicherplatz.
David Spillett
Hallo Leute. In meinem Szenario entwickle ich eine Community-gesteuerte Wiki-ähnliche Website mit strukturierten Daten, auf der ich auf frühere Versionen zurücksetzen kann. Was wäre die beste Wahl für CDC oder TT?
Shimmy Weitzhandler