![]() |
Datenbank: Firebird • Version: 2.5 • Zugriff über: IBX
Firebird Transaction lange offen
Hallo
Ich wollte mal fragen, mit welchen Parametern ist es sinnvoll eine Transaktion zu starten die nur lesen ist, aber dafür sehr lange offen sein kann. Speziell für Auswertungen eben (Reports, Pivot usw) Ich möchte damit eben mein System nicht verlangsamen, meine schreibenden und sonstigen Transactionen sind immer extrem kurz, nur eben diese können teils auch mal tage offen beleiben (sollte nicht sein, aber es kann passieren) Zugriff ist noch per IBX besten danke |
AW: Firebird Transaction lange offen
Warum muss dann die Transaktion tagelang offen bleiben?
|
AW: Firebird Transaction lange offen
müssen nicht aber es passiert halt
Das sind zum teil fremdkomponenten die auf die Datenbank zugreifen, und eben die Daten direkt aus der TIBQuery auslesen, und es muss bei IBX die Transaktion offen bleiben, sonst sind ja die Daten weg. Daher müsste ich entweder eine zwischenschicht einführen, die die daten kopiert, oder die Komponente müsste sich die Daten selber kopieren. Es handelt sich hier im Report Builder, und eine Pivot Komponente - und wenn der user eben die Fenster offen lässt bleibt auch die Transaktion offen. |
AW: Firebird Transaction lange offen
Ich vermute stark, du verwechselst hier was: Nicht die
![]() Eine Query- oder Table-Komponente muß aktiv bleiben, solange die Daten angezeigt oder sonstwie verarbeitet werden sollen. Anders ausgedrückt: Wenn das Property Active der Datenmenge nicht mehr den Status True aufweist, besteht keine Möglichkeit, die Datenmenge zu verarbeiten. Erst das Setzen von Active auf True bzw. der Open-Befehl führt den Select-Befehl aus und beendet damit die Transaktion. |
AW: Firebird Transaction lange offen
Die Antwort lautet :
Firebird hat dafür die "Read Only" Transaction ![]() ![]() mfg Hannes |
AW: Firebird Transaction lange offen
Ich würde die Daten clientseitig cachen.
|
AW: Firebird Transaction lange offen
Zitat:
denn ich habe ja ne TIBQuery und ne TIBTransaction, und sobald ich die TIBTransaction schleiße sind auch die daten aller zugehörigen IBQuerys oder IBTables weg. Und auch am Firebird Server kann ich mir ja die offenen Transaction anschauen und sehe, das es eigentlich so ist. @mkinzler Ja Clientseitig cachen ist ne möglichkeit, und mache ich bei meinen eigenen Sachen auch, nur für die Drittanbieter Software wird es halt um einige schwieriger, und aufwändiger, und ich erhoffte mir eine schneller und fast genau so gute lösung. @hstreicher Aber wenn eine Transaction READ ONLY ist, dann beudetet das ja nicht, das die Records nicht trotzdem Versioniert werden müssen solange die Transaction offen ist oder? eventuell eine kombination mit READ COMMITTED oder [NO] RECORD_VERSION nur ich will auf keinen Fall etwas verschlimmbessern |
AW: Firebird Transaction lange offen
Mit einem Clientdataset o.ä. sollte das kein Problem sein.
|
AW: Firebird Transaction lange offen
Zitat:
Zitat:
|
AW: Firebird Transaction lange offen
Zitat:
Code:
ja meine wenn ich die TIBTransaktion.Active auf False setzte bzw. mit einem Transaction.Commit oder so, wenn ich ein CommitRetaining mache, dann bleiben daten erhalten, aber die Transaktion auch offen
SELECT * FROM MON$TRANSACTIONS
|
AW: Firebird Transaction lange offen
Read-Only, Read Committed. Transaktionen in dieser Kombination können lange offen bleiben. Read Committed gibt dir halt keine stabile Ergebnismenge bei mehrmaligen Ausführen einer Abfrage, aber das mußt du wissen, ob das für deinen Anwendungsfall Ok ist.
|
AW: Firebird Transaction lange offen
Zitat:
dh. alle andern die nicht "Read Committed" sind dürfen nicht lange offen bleiben? (dürfen -> damit nicht ein haufen Record Versionen entstehen und das system langsamer wird) bewirkt ein Read Only eignetlich eine besserung abgesehen davon das ich halt nicht schreiben kann? |
AW: Firebird Transaction lange offen
Es ist die Kombination aus Read Committed UND Read-Only. Generell sollte man Read-Only Transaktionen verwenden, wenn nur gelesen wird. So teilt man das Firebird entsprechend mit und Firebird weiß dann für konkurrierende Transaktionen, d.h. hier keine Datenänderungen zu erwarten sind.
|
AW: Firebird Transaction lange offen
Also habe ich nur die möglichkeit für Reports
- entweder normal, dann habe ich richtige Daten aber die Transaktion sperrt die ganze zeit - READONLY read committed, dann sperrt nix, aber die daten können falsch sein, wenn ich vor/zurückblättere - Umbau auf Cachen der Daten |
AW: Firebird Transaction lange offen
Was verstehst du unter "Sperren"?
|
AW: Firebird Transaction lange offen
Zitat:
|
AW: Firebird Transaction lange offen
Wenn du das unter Sperre verstehst, dann hast du vollkommen Recht.
|
AW: Firebird Transaction lange offen
Warum überhaupt eine Transaktion?
"Ein" SELECT ist in sich geschützt, vor fremden Schreibzugriffen. |
AW: Firebird Transaction lange offen
Das hat hat mit der Art und Weise zu tun wie FireBird die Transaktionssteuerung durchführt. Anstatt eines Logs wird Versionierung verwendet. Deshalb müssen auch Abfragen in einem Transaktionskontext erfolgen (zur Feststellung welche Version des Datensatzes genommen werden soll).
|
AW: Firebird Transaction lange offen
Zitat:
|
AW: Firebird Transaction lange offen
In Firebird geht nix ohne den Kontext einer Transaktion
|
AW: Firebird Transaction lange offen
Zitat:
Zitat:
Zitat:
|
AW: Firebird Transaction lange offen
Interessant dazu folgender Eintrag in der Doku
![]() |
AW: Firebird Transaction lange offen
Nur zur Info. Firebird unterstützt keine Dirty Reads. Gott sei Dank.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:25 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