![]() |
Datenbank: Firebird • Version: 1.5 • Zugriff über: egal
Commit oder Rollback, wenn nur gelesen wird
Hallo #,
jede DB-Aktion findet ja im Rahmen einer Transaktion statt, wenn ich keine selber starte, erfolgt das automatisch. Ich erinnere mich, mal gelesen zu haben, dass ein Rollback in der DB schneller geht als ein Commit, falls keine Daten geändert worden sind. Ich meine hier speziell Firebird (MGA). Greife ich also nur lesend zu, nimmt man dann ein Rollback ??
Delphi-Quellcode:
Transe.StartTransaction;
try Select finally Transe.RollBack; end; oder Commit Transe.StartTransaction; try Select finally Transe.Commit; end; Heiko |
Re: Commit oder Rollback, wenn nur gelesen wird
Hi,
ich wäre mit einer generellen Antwort vorsichtig.... Vermutlich dürfte es keine Probleme machen, was aber wenn Du einen Select auf eine StoredProcedure machst, die irgend was in die DB schreibt? Dann wunderst Du dich warum deine SP nicht so funktioniert wie du erwartest. Ein Rollback würde ich nur dann machen, wenn wirklich etwas schief gegangen ist - ansonsten ein Commit. Grüße Lemmy |
Re: Commit oder Rollback, wenn nur gelesen wird
Hallo,
schon klar, ich sagte aber ausdrücklich select (ohne SP). Ich benutze das start/select/commit an vielen Stellen. Die Frage war halt, ob ein Rollback schneller ist. Heiko |
Re: Commit oder Rollback, wenn nur gelesen wird
Hallo,
Zitat:
da nach einem Rollback noch aufgeräumt werden muß. Ich kann allerdings nicht mehr sagen wo ich das gelesen haben. Zitat:
Die Parameter der Lesetransaktion sind so eingestellt, dass damit nur gelesen und nicht geschrieben werden kann. alex |
Re: Commit oder Rollback, wenn nur gelesen wird
Zitat:
Zitat:
Grüße Lemmy |
Re: Commit oder Rollback, wenn nur gelesen wird
Hallo,
mir ist nicht klar was bei einer Leseoperation "rollBacked" bzw. "commited" werden soll. Es wurde ja nichts verändert. ein Transaktionen nur braucht man nur wenn Änderungen durchgeführt werden, damit die Daten konsistent bleiben. Wenn alle Änderungen durchgeführt werden konnten wird mit einem Commit abgeschlossen ansonsten wird mit Rollback alles wieder in den Ursprungszustand zurückversetzt. Viele Grüsse |
Re: Commit oder Rollback, wenn nur gelesen wird
Hallo ManuelR,
Unsinn ! ;) (Tschulligung) Jede Aktion findet im Kontext einer Transaktion statt, um z.B. sicherzustellen, dass zweimaliges Select (z.B. des gleichen Datensatzes) ímmer das gleiche ergibt, auch wenn er von einer anderen Transaktion in der Zwischenzeit geändert wurde (isolation level: repeatable read oder snapshot). Wichtig ist das bei längeren Transaktionen, z.B. Inventur. Wenn z.B. ein User1: Select * From Articles 100 Artikel anzeigt User2: trägt einen neuen Artikel ein User1: Select Count(*) From Articles ergibt trotzdem 100 Ich benutze beim Select manuelle Transaktionen, weil das sehr bei mehreren Selects schneller ist, also die von der (BDE, jaja) bereitsgestellten automatischen Transaktionen. Bsp: Ohne manuelle Transaktionen Select * From bla1 1. Transaktion start/commit Select * from bla2 2. Transaktion start/commit Select * from bla3 3. Transaktion start/commit mit manuellen Transaktionen 1. Transaktion Start Select * From bla1 Select * from bla2 Select * from bla3 1. Transaktion Commit Letzters ist in der Regel bei mir um Faktor 2-3 schneller. Heiko |
Re: Commit oder Rollback, wenn nur gelesen wird
Zitat:
als Erstes die Art der Sicht auf die Daten. Also welche Daten sehe ich im Laufe der Transaktion. Dies wird den Isolationsgrad definiert (Read Committed, Snapshot, ...) Deshalb wird auch das Lesen immer innerhalb einer Transaktion durchgeführt auch wenn du selbst in deinem Programm explizit keine gestartet hast. alex p.s Heiko war schneller. :P |
Re: Commit oder Rollback, wenn nur gelesen wird
Zitat:
|
Re: Commit oder Rollback, wenn nur gelesen wird
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz