AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Commit oder Rollback, wenn nur gelesen wird
Thema durchsuchen
Ansicht
Themen-Optionen

Commit oder Rollback, wenn nur gelesen wird

Ein Thema von hoika · begonnen am 24. Jan 2007 · letzter Beitrag vom 1. Feb 2007
Antwort Antwort
Seite 1 von 2  1 2      
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#1

Commit oder Rollback, wenn nur gelesen wird

  Alt 24. Jan 2007, 11:17
Datenbank: Firebird • Version: 1.5 • Zugriff über: egal
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
Heiko
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.381 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Commit oder Rollback, wenn nur gelesen wird

  Alt 24. Jan 2007, 11:37
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
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Commit oder Rollback, wenn nur gelesen wird

  Alt 24. Jan 2007, 11:53
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
Heiko
  Mit Zitat antworten Zitat
alex517

Registriert seit: 23. Nov 2004
Ort: Bernau b. Berlin
273 Beiträge
 
Delphi XE5 Enterprise
 
#4

Re: Commit oder Rollback, wenn nur gelesen wird

  Alt 24. Jan 2007, 13:22
Hallo,

Zitat von hoika:
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 bin ziemlich sicher das es genau anders herum ist. Das Commit ist schneller,
da nach einem Rollback noch aufgeräumt werden muß.
Ich kann allerdings nicht mehr sagen wo ich das gelesen haben.

Zitat von Lemmy:
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.
Um solche Überraschungen auszuschließen benutze ich für Lesen und Schreiben getrennte Tarnsaktionen.
Die Parameter der Lesetransaktion sind so eingestellt, dass damit nur gelesen und nicht geschrieben werden kann.

alex
Alexander
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.381 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Commit oder Rollback, wenn nur gelesen wird

  Alt 24. Jan 2007, 13:42
Zitat von alex517:
Ich bin ziemlich sicher das es genau anders herum ist. Das Commit ist schneller,
ich meine auch mal so was gehört/gelesen zu haben bin mir aber absolut nicht sicher. Wenn wirklich nur gelesen wird, dann sollte eigentlich auch nichts zum aufräumen da sein. Auf der anderen Seite - wenn viele andere schreibend auf die DB zugreifen....

Zitat von alex517:
Um solche Überraschungen auszuschließen benutze ich für Lesen und Schreiben getrennte Tarnsaktionen.
Die Parameter der Lesetransaktion sind so eingestellt, dass damit nur gelesen und nicht geschrieben werden kann.
darf ich dich kurz mal um 2 Infos bitten: 1. Welche Zugriffskomponenten, 2. die Einstellungen der Lese_Transaction... ich habe mich bisher nicht wirklich um die Einstellungen der Transaction-Komponenten gekümmert....

Grüße
Lemmy
  Mit Zitat antworten Zitat
ManuelR

Registriert seit: 14. Dez 2005
Ort: Backnang
57 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Commit oder Rollback, wenn nur gelesen wird

  Alt 24. Jan 2007, 13:54
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
Wenn alle Experten sich einig sind, ist Vorsicht geboten (Bertrand Russell)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Commit oder Rollback, wenn nur gelesen wird

  Alt 24. Jan 2007, 14:09
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
Heiko
  Mit Zitat antworten Zitat
alex517

Registriert seit: 23. Nov 2004
Ort: Bernau b. Berlin
273 Beiträge
 
Delphi XE5 Enterprise
 
#8

Re: Commit oder Rollback, wenn nur gelesen wird

  Alt 24. Jan 2007, 15:00
Zitat von ManuelR:
ein Transaktionen nur braucht man nur
wenn Änderungen durchgeführt werden, damit
die Daten konsistent bleiben.
Abgesehen vom Zusammenfassen der Datenänderungen ist eine Transaktion
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.
Alexander
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#9

Re: Commit oder Rollback, wenn nur gelesen wird

  Alt 24. Jan 2007, 17:52
Zitat von Lemmy:
darf ich dich kurz mal um 2 Infos bitten: 1. Welche Zugriffskomponenten, 2. die Einstellungen der Lese_Transaction... ich habe mich bisher nicht wirklich um die Einstellungen der Transaction-Komponenten gekümmert....
Glaube er verwendet auch FIBPlus, so wie ich. Aber ohne Gewähr. Alex ist schlau. Die Einstellungen der Transaktionen sind wichtig. Wer damit hantiert, der soll sich mal da die 4-teilige Artikelserie über Transaktionen ansehen.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: Commit oder Rollback, wenn nur gelesen wird

  Alt 24. Jan 2007, 17:59
Zitat von hoika:
Unsinn ! (Tschulligung)

Jede Aktion findet im Kontext einer Transaktion statt,
um z.B. sicherzustellen, dass zweimaliges Select ...

...

User1: Select * From Articles 100 Artikel anzeigt
User2: trägt einen neuen Artikel ein
User1: Select Count(*) From Articles ergibt trotzdem 100
Da war aus deinem ersten Post nicht zu ersehen das du mehrere Select's benötigst. Für einen einzelnes Select wäre die Transaktion unnötig.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz