Leistungsüberlegungen für Transaktions-NTFS
Transaktions-NTFS (TxF) wurde sorgfältig für die Leistung entwickelt und ist in der Regel besser als allgemeine Transaktionsalternativen in ähnlichen Szenarien. Dateisystemtransaktionen weisen jedoch mehr Mehraufwand auf als nicht durchgeführte Vorgänge, und es ist mit einer gewissen Verringerung der E/A-Leistung im Vergleich zu nicht durchgeführten E/A-Vorgängen zu rechnen. Leistungskritische Anwendungen sollten einen Qualifikationszyklus für die Technologieeinführung durchführen, um die Leistungsauswirkungen von transaktionierten Dateisystemvorgängen zu bewerten.
Übersicht über TxF-Vorgänge
TxF verwendet die Undo-Protokollierung , um die Änderungen aufzuzeichnen, die erforderlich sind, um das Dateisystem wieder in einen konsistenten Zustand zu versetzen, der auch als Rollback bezeichnet wird, falls ein Transaktionsabbruch auftritt. Diese Rückgängigprotokollierung generiert zusätzliche E/A-Vorgänge und ist die Quelle von TxF-Leistungsaufwand im Vergleich zu nicht transaktionalen Dateisystemvorgängen.
Eine allgemeine Zusammenfassung der Funktionsweise von TxF lautet wie folgt:
- Wenn eine Transaktion fortschreitet, schreibt TxF Rückgängigdatensätze für jede Änderung, die sie am Dateisystem vornimmt, in die Protokolldatei. Wenn ein Abbruch auftritt, werden diese Rückgängigdatensätze analysiert, um das Dateisystem wieder in den Zustand zu versetzen, der vor Beginn der Transaktion war.
- Ein Metadatenänderungs-Undo-Datensatz beschreibt eine Änderung nur an den Metadaten des Dateisystems. Beispiele hierfür sind Verschiebungen, Umbenennungen, Anfügevorgänge und Attributänderungen. Bei Metadatenänderungs- undo-Datensätzen befinden sich alle informationen, die zum Rückgängigmachen der Änderung erforderlich sind, im Datensatz und werden in der Protokolldatei gespeichert.
- Ein Überschreiben eines Undo-Datensatzes beschreibt das Überschreiben eines Teils einer Datei. Wenn eine Datei überschrieben wird, wird der ursprüngliche Inhalt der Datei in einer speziellen Rückgängig-Datei in einem ausgeblendeten Verzeichnis gespeichert, und der überschreibende Undo-Datensatz verweist auf diese Datei. Wenn Dateiupdates schließlich vom Cache auf den Datenträger geleert werden, muss auch der Inhalt der Rückgängigdatei geleert werden, sodass ein überschriebener Datei bis zu zwei zusätzliche zufällige E/A-Vorgänge generieren kann: einen zum Lesen der alten Daten und einen zum Schreiben in die Rückgängigdatei. Diese zusätzlichen E/A-Vorgänge sind Leistungskosten von TxF.
- Wenn ein Commit erfolgt, löscht TxF zunächst alle Rückgängig-Informationen, löscht dann die tatsächlichen Dateiänderungen und schreibt und löscht dann einen Commitdatensatz. Wenn keine Rückgängigdateien geleert werden müssen, ist der einzige zusätzliche TxF-Mehraufwand im Verhältnis zu nicht durchgeführten E/A-Vorgängen die Protokolllöschung selbst. Protokollleerungen führen jedoch zu effizienten großen sequenziellen Schreibvorgängen, sodass die Leistungskosten minimal sind.
- TxF ist für Commit optimiert. Es wird erwartet, dass die meisten Transaktionen erfolgreich sind und kein Rollback erforderlich ist. Daher wird erwartet, dass alle Rückgängig-Datensätze für eine Transaktion nicht verwendet werden. Aus Leistungssicht sind TxF-Commitvorgänge schnell und Rollbacks ressourcenintensiv.
- Rollback ist ressourcenintensiver als Commit. Während des Rollbacks müssen alle Änderungen, die in der Transaktion vorgenommen wurden, rückgängig gemacht werden. Im Allgemeinen kann die Rollbackdauer ungefähr die gleiche sein, wie sie ursprünglich für die Änderungen erforderlich war. Wenn beispielsweise 1 Sekunde benötigt wurde, um alle Änderungen vorzunehmen, kann es etwa 1 Sekunde dauern, um sie rückgängig zu machen. Bei sehr langen Transaktionen kann ein Rollback zu zusätzlichen Leistungseinbußen führen. Beispielsweise kann die Systemstartzeit verzögert werden, wenn das System eine Transaktion automatisch zurücksetzen muss, falls das System nicht mehr reagiert und einen ungeplanten Neustart durchführen muss.
Die zusammenfassenden Schlussfolgerungen zur Leistung, die aus der vorherigen Liste gezogen werden können, sind wie folgt:
- Die Leistungskosten von TxF für Transaktionen mit Dateiüberschreibungen können erheblich sein.
- Die Leistungskosten von TxF für Transaktionen, die nur Metadatenvorgänge umfassen, können relativ niedrig sein, sofern große Transaktionen verwendet werden. Eine große Transaktion ist, wenn viele Undo-Datensätze für jeden Commitdatensatz vorhanden sind.
Empfehlungen für optimale Leistung
Amortisieren Sie den TxF-Overhead über größere Transaktionen. Wenn Sie beispielsweise N-Sätze von Änderungen vornehmen müssen, bei denen jede Änderung M-Schritte enthält, und Sie die Möglichkeit haben, dies entweder als N-Transaktionen der einzelnen M-Schritte oder als einzelne Transaktion mit M*N-Schritten durchzuführen, wäre die letztere Option effizienter.
Berücksichtigen Sie die möglichen Auswirkungen sehr großer Transaktionen auf den Start. Wie bereits erwähnt, kann das Rollback langsam sein und verzögert die Startzeit, wenn das System automatische Rollbacks als Startzeit ausführen muss. Je größer die Transaktion, desto länger ist die Verzögerung.
Behalten Sie Transaktionen in den meisten Metadatenvorgängen bei. Dafür ist TxF optimiert, und im Allgemeinen ist die Leistung etwa identisch mit der E/A-Datei ohne Transaktion für große Metadatentransaktionen. Beispiele für effiziente Metadaten-TxF-Funktionen sind MoveFileTransacted, SetFileAttributesTransacted, CopyFileTransacted, DeleteFileTransacted, CreateHardLinkTransacted und angefügte Schreibvorgänge (Aufrufe der WriteFile-Funktion , wenn der Dateizeiger wie am Ende der Datei oder EOF). Ein Beispiel für ressourcenintensive Vorgänge ohne Metadaten sind Aufrufe der WriteFile-Funktion , wenn sich der Dateizeiger nicht am EOF befindet.
Zusammenfassung der TxF-Leistungserwartungen
Bei direkten Updates ist das Überschreiben in einen Abschnitt einer Datei viel langsamer als die E/A-Datei ohne Transaktion, während die TxF-Leistung für Dateisystemmetadatenvorgänge (z. B. Erstellen, Verschieben und Anfügen) mit nicht transaktionsbasierten Datei-E/A-Vorgängen für große Transaktionen vergleichbar ist.