Commit vs. Fast Commit vs. Commit Cleanout in der Oracle-Datenbank

12

Ich habe mich gefragt, ob jemand mein Verständnis hinsichtlich der Unterschiede zwischen diesen drei Begriffen in Bezug auf Oracle-Datenbanken überprüfen kann.

Viele Quellen verwechseln diese Begriffe und erklären sie nicht im Detail, so dass es eine Herausforderung war, Informationen zu finden.

Soweit ich weiß:

  1. Commit und Fast Commit sind genau dasselbe, alle Commits sind Fast Commits.
  2. Ein schnelles Festschreiben aktualisiert im Wesentlichen nur das Flag in der Transaktionstabelle des Undo / Rollback-Segment-Headers, um anzuzeigen, dass die Transaktion festgeschrieben wurde. Der aktuelle Block wird jedoch nicht erneut aufgerufen, was bedeutet, dass die Undo-Byte-Adresse (UBA) in der interessierten Transaktionsliste (ITL), die sich im Header des Datenblocks befindet, weiterhin auf die Transaktionstabelle des entsprechenden Undo-Segments verweist. Darüber hinaus werden die Sperrbytes der entsprechenden Zeilen nicht freigegeben und die Sperranzahl in der ITL bleibt unverändert (Zeilen sind noch gesperrt).
  3. In einem Räumungs begehen, der Block wird überarbeitet und die ITL mit dem commit SCN aktualisiert. Die Anzahl der Sperren in der ITL und das mit jeder Zeile gespeicherte Sperrbyte werden jedoch immer noch nicht aktualisiert (die Zeile bleibt wie beim schnellen Festschreiben gesperrt). Dies führt nicht zum Wiederherstellen, obwohl der Block geändert wird.
  4. Blöcke, die normal festgeschrieben wurden (== schnell festgeschrieben), werden beim nächsten Berühren einer verzögerten Blockbereinigung unterzogen (und erneut erstellt).
  5. Blöcke, für die eine Commit-Bereinigung durchgeführt wurde, werden bei der nächsten Berührung einer Block-Bereinigung mit verzögerter Protokollierung unterzogen (und erneut erstellt).

Hoffentlich kann jemand diese Punkte überprüfen! Vielen Dank!

BYS2
quelle

Antworten:

6

Sie haben die Grundlagen richtig. Es gibt nur eine Art von Festschreibung (keine normale , schnelle ...).

Aus den Konzepten doc :

Wenn eine Transaktion festgeschrieben wird, werden folgende Aktionen ausgeführt:

  • Für das COMMIT wird eine Systemänderungsnummer (SCN) generiert.

    Die interne Transaktionstabelle für die zugeordneten Undo-Tablespace-Datensätze, die die Transaktion festgeschrieben hat. Die entsprechende eindeutige SCN der Transaktion wird zugewiesen und in der Transaktionstabelle aufgezeichnet. Siehe "Serialisierbare Isolationsstufe".

  • Der LGWR-Prozess (Log Writer) schreibt die verbleibenden Redo-Log-Einträge in die Redo-Log-Puffer in das Online-Redo-Log und schreibt die Transaktion SCN in das Online-Redo-Log. Dieses atomare Ereignis bildet das Commit der Transaktion.

  • Oracle Database gibt Sperren für Zeilen und Tabellen frei.

    Benutzer, die in der Warteschlange standen und auf Sperren warteten, die von der nicht festgeschriebenen Transaktion gehalten wurden, können ihre Arbeit fortsetzen.

  • Oracle Database löscht Sicherungspunkte.

  • Oracle Database führt eine Commit-Bereinigung durch.

    Wenn sich geänderte Blöcke, die Daten aus der festgeschriebenen Transaktion enthalten, noch im SGA befinden und von keiner anderen Sitzung geändert werden, entfernt die Datenbank sperrenbezogene Transaktionsinformationen aus den Blöcken. Idealerweise löscht das COMMIT die Blöcke, damit ein nachfolgendes SELECT diese Aufgabe nicht ausführen muss.

Das Bereinigen (voll mit Wiederherstellen) wird also während des Festschreibens durchgeführt, wenn sich die Blöcke noch in der SGA befinden.

In aktiven Systemen ist es üblich, dass Blöcke mit nicht festgeschriebenen Transaktionen auf die Festplatte geschrieben und von der SGA gelöscht werden. In diesem Fall bleibt der Block unverändert, und die nächste Abfrage, die den Block berührt, führt eine verzögerte Blockbereinigung durch (Ihr Punkt 5 passiert nicht in allen Fällen).

Vincent Malgrat
quelle