Wenn Recovery plötzlich nicht mehr ewig dauert
Du kennst das: SQL Server startet neu, weil das System abgestĂŒrzt ist.
Dann steht die Datenbank erstmal auf âWiederherstellung…â.
Und Du kannst nur warten.
Bei groĂen Transaktionen oder vielen gleichzeitigen Ănderungen kann das dauern.
Richtig lange.
Seit SQL Server 2019 gibtâs dafĂŒr eine Lösung:
Accelerated Database Recovery â kurz ADR.
Was ADR verÀndert
FrĂŒher lief Recovery in drei Schritten:
- Analysephase
- Rollforward (Redo)
- Rollback (Undo)
Problem: Die Undo-Phase hÀngt an der LÀnge der offenen Transaktionen.
Ein abgebrochener Batch konnte minuten- oder stundenlang alles blockieren.
ADR macht das anders:
Es kapselt jede Transaktion intern und kann sie sofort abbrechen.
Auch bei Crash, Timeout oder manuellem KILL
.
Wie ADR das technisch löst
ADR nutzt drei Kernkomponenten:
- Persisted Version Store (PVS): Versionsdaten werden in der Datenbank selbst gespeichert, nicht im TempDB-Versionsspeicher.
- Logical Undo: Abbruch logischer Ănderungen per Metadaten â statt jede Seite einzeln zurĂŒckzusetzen.
- Sarg-Resistente Recovery: Alle Ănderungen werden effizient identifiziert â unabhĂ€ngig von GröĂe und Dauer.
Ergebnis:
Recovery ist konstant schnell.
Auch bei vielen offenen Ănderungen.
Aktivierung von ADR
Du aktivierst ADR pro Datenbank:
ALTER DATABASE [MeineDatenbank]
SET ACCELERATED_DATABASE_RECOVERY = ON;
Zur Sicherheit prĂŒfen:
SELECT name, is_accelerated_database_recovery_on
FROM sys.databases
WHERE name = 'MeineDatenbank';
StandardmĂ€Ăig ist ADR ab SQL Server 2022 fĂŒr neue Datenbanken aktiviert.
Bei Ă€lteren Datenbanken musst Duâs manuell setzen.
Was sich im Verhalten Àndert
KILL
-Kommandos sind sofort wirksam- Recovery nach Serverneustart dauert nur Sekunden
- Rollbacks blockieren keine Leser mehr
- Weniger Log-Wachstum bei langen Transaktionen
Beispiel:
Ein UPDATE ĂŒber 1 Mio Zeilen dauert 5 Minuten.
Ohne ADR dauert das KILL ca. 5 Minuten.
Mit ADR: < 5 Sekunden.
Tabelle: Vorher vs. Nachher
Szenario | Ohne ADR | Mit ADR |
---|---|---|
Server-Absturz | Recovery dauert lange | Recovery in Sekunden |
Lange Transaktion abbrechen | Blockiert alles | Sofortiger Abbruch |
Leser warten auf Writer | Ja | Nein (MVCC möglich) |
TempDB-Belastung | Hoch (Version Store) | Gering (in DB selbst) |
Beispiel: Rollback-Verhalten
Ohne ADR:
BEGIN TRAN;
UPDATE Kunden SET PLZ = '00000'; -- 100.000 Zeilen
WAITFOR DELAY '00:05:00';
ROLLBACK;
Ergebnis:
ROLLBACK dauert fast genauso lange wie das UPDATE.
Mit ADR:
ROLLBACK ist nach 1â2 Sekunden erledigt.
Performance-Hinweis
ADR ist nicht immer schneller beim normalen Betrieb.
Bei groĂen Batch-VorgĂ€ngen kann es leicht langsamer sein.
Aber im Ernstfall (Abbruch, Absturz, KILL) ist es unschlagbar.
Deshalb mein Tipp:
- ADR aktivieren bei groĂen DBs
- ADR testen bei batchlastigen Prozessen
- ADR nur deaktivieren, wenn es messbar Probleme macht
Mein Setup fĂŒr ADR in KMU-Projekten
Komponente | Empfehlung |
---|---|
SQL Server Version | 2019 oder neuer |
Aktivierung ADR | pro DB: ALTER DATABASE ... |
Monitoring | sys.dm_tran_version_store_space_usage |
Logging / Tests | regelmĂ€Ăig Rollback-Szenarien prĂŒfen |
AusnahmefÀlle | Altsysteme mit Fremdprozessen |
ADR ist keine Raketenwissenschaft.
Aber eine sehr nĂŒtzliche Neuerung.
Wenn Du SQL Server produktiv einsetzt und ADR noch nicht nutzt â
dann solltest Du das Àndern.
Nicht irgendwann. Jetzt.
Keine Antworten