Datenbanken enthalten oft entweder ein Vorher-Bild-Journal (was es vor der Transaktion war) oder ein Nach-Image-Journal (was es sein wird, wenn die Transaktion abgeschlossen ist.) Wenn es ein Vorher-Bild enthält, muss das sein bei einem Rollback wiederhergestellt. Wenn es ein Nachbild enthält, muss dieses im Falle eines Commits die Daten ersetzen.
Oracle hat sowohl einen Journal- als auch einen Rollback-Speicherplatz. Das Transaktionsjournal akkumuliert Blöcke, die später von DB-Schreibern geschrieben werden. Da diese asynchronen sind, hat fast nichts DB Writer Auswirkungen auf Ihre Transaktion (wenn die Warteschlange füllt, dann müssen Sie möglicherweise warten.)
Auch für eine Abfrage-Transaktion bin ich bereit zu wetten dass es in den Rollback-Bereichen von Oracle ein bisschen Transaktionsrekord gibt. Ich vermute, dass ein Rollback eine gewisse Arbeit an Oracle erfordert, bevor es feststellt, dass es nichts gibt, was tatsächlich rückgängig gemacht werden kann. Und ich denke, das ist synchron mit Ihrer Transaktion. Sie können keine Sperren wirklich freigeben, bis das Rollback abgeschlossen ist. [Ja, ich weiß, dass Sie keine in Ihrer Transaktion verwenden, aber das Sperrproblem ist, warum ich denke, ein Rollback muss vollständig freigegeben werden dann können alle Sperren freigegeben werden, dann ist Ihr Rollback beendet.]
Ein Auf der anderen Seite ist das Commit mehr oder weniger das erwartete Ergebnis, und ich vermute, dass das Löschen des Rollback-Bereichs möglicherweise etwas schneller ist. Sie haben keine Transaktionseinträge erstellt, so dass der db writer niemals aufwachen wird, um zu überprüfen und festzustellen, dass nichts zu tun ist.
Ich erwarte auch, dass, während Commit schneller sein kann, die Unterschiede gering sein werden. So geringfügig, dass Sie sie vielleicht nicht einmal in einem direkten Vergleich messen könnten.
Ich erkenne das nicht als eine Beschreibung der Art und Weise wie Orakel überhaupt funktioniert. Es klingt wie eine generische Beschreibung, die auf Oracle angewendet wurde. Vermutungen, wie Oracle arbeitet, sind wahrscheinlich nicht hilfreich. –
Oracle ruft das Journal eine "Redo Log File" auf. Er ruft die Rollback-Segmente als "Rückgängig-Tablespace" auf. Weißt du, was schneller ist? Commit oder Rollback? –
Wenn es keine Arbeit zu tun gibt, gibt es fast sicher keinen Unterschied. Oracle ist für schnelles Commit optimiert - es erfordert nur, dass der Commit-Datensatz in den Redo-Log-Puffer geschrieben und der Puffer geleert wird (außer bei asynchronem Commit in 10g +). Ein Rollback ist mehr Arbeit. –