Verwalten von historischen Daten mit einer Aufbewahrungsrichtlinie
Wichtig
Azure SQL Edge wird am 30. September 2025 eingestellt. Weitere Informationen und Migrationsoptionen finden Sie im Einstellungshinweis.
Hinweis
Azure SQL Edge unterstützt die ARM64-Plattform nicht mehr.
Nachdem die Datenaufbewahrungsrichtlinie für eine Datenbank und die zugrunde liegenden Tabellen definiert wurde, wird ein Hintergrundtask ausgeführt, um alle veralteten Datensätze aus den Tabellen zu entfernen, für die die Datenaufbewahrung aktiviert wurde. Die Ermittlung übereinstimmender Zeilen und deren Entfernung aus der Tabelle erfolgen transparent mithilfe eines vom System geplanten und ausgeführten Hintergrundtasks. Die Altersbedingung für die Tabellenzeilen wird anhand der Spalte filter_column
geprüft, die in der Tabellendefinition angegeben ist. Wenn der Aufbewahrungszeitraum beispielsweise auf eine Woche festgelegt ist, erfüllen die für die Bereinigung infrage kommenden Zeilen eine der folgenden Bedingungen:
- Hat die Filterspalte den Datentyp DATETIMEOFFSET, lautet die Bedingung
filter_column < DATEADD(WEEK, -1, SYSUTCDATETIME())
. - Andernfalls ist die Bedingung
filter_column < DATEADD(WEEK, -1, SYSDATETIME())
.
Phasen der Bereinigung für eine Datenaufbewahrung
Der Bereinigungsvorgang für eine Datenaufbewahrung besteht aus zwei Phasen:
- Ermittlung: In dieser Phase werden im Bereinigungsvorgang alle Tabellen in den Benutzerdatenbanken ermittelt, um eine Liste für die Bereinigung zu erstellen. Diese Ermittlung wird einmal täglich ausgeführt.
- Bereinigung: In dieser Phase wird die Bereinigung für alle Tabellen mit begrenzter Datenaufbewahrung ausgeführt, die während der Ermittlungsphase gefunden wurden. Kann der Bereinigungsvorgang für eine Tabelle nicht ausgeführt werden, wird diese Tabelle in der aktuellen Ausführung übersprungen, und in der nächsten Iteration wird versucht, den Vorgang zu wiederholen. Die folgenden Prinzipien werden während einer Bereinigung angewandt:
- Wenn eine veraltete Zeile durch eine andere Transaktion gesperrt ist, wird diese Zeile übersprungen.
- Die Bereinigung wird mit einem Standardsperrtimeout von 5 Sekunden ausgeführt. Können die Sperren für eine Tabelle nicht innerhalb des Timeoutfensters aufgehoben werden, wird die Tabelle bei der aktuellen Ausführung übersprungen, und in der nächsten Iteration wird versucht, den Vorgang zu wiederholen.
- Tritt während der Bereinigung einer Tabelle ein Fehler auf, wird diese Tabelle übersprungen und in die nächste Iteration erneut einbezogen.
Manuelle Bereinigung
Abhängig von den Datenaufbewahrungseinstellungen für eine Tabelle und der Art des Workloads für die Datenbank kann es passieren, dass der automatische Bereinigungsthread bei seiner Ausführung nicht alle veralteten Zeilen entfernt. Um Benutzern das manuelle Entfernen veralteter Zeilen zu ermöglichen, wurde in Azure SQL Edge die gespeicherte Prozedur sys.sp_cleanup_data_retention
eingeführt.
Diese gespeicherte Prozedur akzeptiert drei Parameter:
@schema_name
: der Name des besitzenden Schemas für die Tabelle Erforderlich.@table_name
: der Name der Tabelle, für die die manuelle Bereinigung ausgeführt wird Erforderlich.@rowcount
: die Ausgabevariable Gibt die Anzahl der Zeilen zurück, die bei der manuellen Bereinigung bereinigt wurden. Optional.
Weitere Informationen finden Sie unter sys.sp_cleanup_data_retention (Transact-SQL).
Das folgende Beispiel zeigt, wie die gespeicherte Prozedur zur manuellen Bereinigung der Tabelle dbo.data_retention_table
ausgeführt wird.
DECLARE @rowcnt BIGINT;
EXEC sys.sp_cleanup_data_retention 'dbo', 'data_retention_table', @rowcnt OUTPUT;
SELECT @rowcnt;
Löschen veralteter Zeilen
Der Bereinigungsprozess hängt vom Indexlayout der Tabelle ab. Es wird eine Hintergrundaufgabe erstellt, um die Bereinigung veralteter Daten für alle Tabellen mit begrenztem Aufbewahrungszeitraum auszuführen. Die Bereinigungslogik für den Rowstore-Index (Heap- oder B-Struktur) löscht veraltete Zeilen in kleineren Blöcken (max. 10.000), wodurch die Belastung des Datenbankprotokolls und des E/A-Subsystems minimiert wird. Die Bereinigungslogik verwendet zwar den benötigten B-Strukturindex, allerdings kann die Löschreihenfolge der Zeilen, die den Aufbewahrungszeitraum übersteigen, nicht sicher garantiert werden. Verwenden Sie in Ihren Anwendungen daher keine Abhängigkeit von der Bereinigungsreihenfolge.
Warnung
Im Fall von Heap- und B-Strukturindizes wird für eine Datenaufbewahrung eine Löschabfrage für die zugrunde liegenden Tabellen ausgeführt, die in Konflikt mit den Löschtriggern für die Tabellen stehen kann. Sie sollten entweder Löschtrigger aus den Tabellen entfernen oder die Verwendung der Datenaufbewahrung für Tabellen vermeiden, die über DML-Trigger für das Löschen verfügen.
Der Bereinigungstask für die gruppierten Columnstore-Indizes entfernt ganze Zeilengruppen auf einmal (die üblicherweise jeweils 1 Mio. Zeilen enthalten). Dies ist insbesondere dann effizient, wenn Verlaufsdaten sehr schnell generiert werden und veralten.
Die hervorragende Datenkomprimierung und die effiziente Aufbewahrungsbereinigung machen den gruppierten Columnstore-Index zur perfekten Lösung für Szenarien, in denen Ihre Workload in kürzester Zeit eine große Datenmengen generiert.
Überwachen der Bereinigung der Datenaufbewahrung
Bereinigungsvorgänge einer Datenaufbewahrungsrichtlinie können mithilfe von erweiterten Ereignissen in Azure SQL Edge überwacht werden. Weitere Informationen zu erweiterten Ereignissen finden Sie unter Übersicht über erweiterte Ereignisse.
Mit den folgenden erweiterten Ereignissen können Sie den Zustand der Bereinigungsvorgänge verfolgen.
Name | Beschreibung |
---|---|
data_retention_task_started | Tritt ein, wenn ein Hintergrundtask zum Bereinigen von Tabellen mit einer Aufbewahrungsrichtlinie gestartet wird. |
data_retention_task_completed | Tritt ein, wenn ein Hintergrundtask zum Bereinigen von Tabellen mit einer Aufbewahrungsrichtlinie beendet wird. |
data_retention_task_exception | Tritt ein, wenn in einem Hintergrundtask zur Bereinigung von Tabellen mit Aufbewahrungsrichtlinie außerhalb des für eine Tabelle speziellen Aufbewahrungsbereinigungsprozesses ein Fehler auftritt. |
data_retention_cleanup_started | Tritt ein, wenn der Bereinigungsprozess einer Tabelle mit Datenaufbewahrungsrichtlinie gestartet wird. |
data_retention_cleanup_exception | Tritt ein, wenn beim Bereinigungsprozess einer Tabelle mit Aufbewahrungsrichtlinie ein Fehler auftritt. |
data_retention_cleanup_completed | Tritt ein, wenn der Bereinigungsprozess einer Tabelle mit Datenaufbewahrungsrichtlinie beendet wird. |
Darüber hinaus wurde der dynamischen Verwaltungssicht sys.dm_os_ring_buffers
ein neuer Ringpuffertyp namens RING_BUFFER_DATA_RETENTION_CLEANUP
hinzugefügt. Diese Sicht kann dazu verwendet werden, die Bereinigungsvorgänge für eine Datenaufbewahrung zu überwachen.