Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Sinn von commitretaining (https://www.delphipraxis.net/152181-sinn-von-commitretaining.html)

idefix2 14. Jun 2010 13:03

Datenbank: Firebird • Version: 2.1 • Zugriff über: UIB

Sinn von commitretaining
 
Hallo,
gibt es eigentlich einen Unterschied zwischen
commitretaining
und
commit mit anschliessendem neuen Transaktionsstart?
Oder ist das nur eine "abgekürzte Schreibweise"?

Wenn ich sehr viele Aktionen in der Datenbank habe (meherere 100.000 beim Datenimport), sollte ich besser zwischendurch ca alle 1000 Aktionen ein commit mit
anschliessendem neuen Transaction Start ausführen oder ein CommitRetaining? Wenn ich nichts dergleichen mache, wirkt sich das negativ auf die Performance aus?

Und eine dazupassende zweite Frage:
Wird eine Transaktion durch Rollback automatisch geschlossen, oder bleibt sie weiter aktiv?
Das Rollback geht ja nur bis zum letzten CommitRetaining zurück?

HeikoAdams 14. Jun 2010 13:12

AW: Sinn von commitretaining
 
Zitat:

Zitat von idefix2 (Beitrag 1028739)
Wird eine Transaktion durch Rollback automatisch geschlossen, oder bleibt sie weiter aktiv?

Ein Rollback macht - wie der Name sagt - die Rolle rückwärts, sprich alle seit dem letzten Commit gemachten Änderungen rückgängig und schließt obendrein die aktuelle Transaktion.

mkinzler 14. Jun 2010 13:13

AW: Sinn von commitretaining
 
Kommt imho auf die Komponente an. Kennt diese SavePoints würde ich direkt diese verwenden

idefix2 14. Jun 2010 17:26

AW: Sinn von commitretaining
 
Mir ist schon der Unterschied zwischen commitretaining und commit/start transaction nicht wirklich klar. Worin unterscheidet sich jetzt ein savepoint von den beiden?

Wenn ich die Doku richtig verstehe, kann man innerhalb einer Transaktion mehrere Savepoints anlegen und dann ein Rollback zu einem ausgewählten Savepoint machen, statt die ganze Transaktion rückgängig zu machen. Das würde aber bedeuten, das die Transaktion insgesamt riesig wird, bei über 200.000 inserts. Wirkt sich das nicht negativ auf die Performance aus? Ich mache ja vor allem deshalb zwischen durch immer wieder commits, weil ich mir denke, dass die Transaktion irgendwann immer langsamer werden wird, je länger sie wird? Oder ist das nicht der Fall?

mkinzler 14. Jun 2010 18:02

AW: Sinn von commitretaining
 
Ja ein SavePoint ist eine "Teil"-Transaktion. SavePoints machen also nur Sinn, wenn sie wirklich ein Punkt darstellen, auf den man zurück will.
Der Unterschied zwicshen COMIIT unbd COMMIT RETAINING ist dass bei ersterem der Kontext geschlossen wird ( und u.U. dann auch die Datenmenge) und je nach Komponente ein neuer geöffnet ( DatSet wird dann nicht mehr sichbar geschlossen) und bei dem containing der vorhandene Kontext wiederverwendet wird ( was gewisse Nebeneffekte haben kann)

idefix2 14. Jun 2010 21:24

AW: Sinn von commitretaining
 
Heikoadams, mkinzler,
danke für die Antworten :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:10 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