Firebird 5 demnächst RC

Produkt- und Serviceankündigungen zu Firebird.

Moderator: martin.koeditz

bfuerchau
Beiträge: 490
Registriert: Mo 7. Mai 2018, 18:09
Kontaktdaten:

Zu meinem vorherigen Beitrag muss ich mich leider berichtigen :( .
Dein Test mit ReadCommitted bringt genau das Ergebnis, dass eine solche Transaktion bringen darf!

Die Aussage ist ja bei dieser Aktion, dass alle Daten, die während des Lesens committed sind, also auch die, die committed werden nach dem der Select gestartet ist, sichtbar werden.
Nun liegt es in der Tatsache begründet, dass der Cursor über einen Teil der Daten schon hinweg ist und wenn der Commit dann zuschlägt, ab diesem Zeitpunkt die restlichen Daten nun sichtbar werden.
Dies passiert auch z.B. bei der DB2, die ich testen kann. Hier gibts keine Satzversionen oder Transaktionsmarker, daher werden alle Daten, die während der Aktion geändert oder hinzugefügt wurden, gesperrt. Gelöschte Sätze sind tatsächlich auch weg.
Eine andere Connection überliest halt die gesperrten Zeilen. Sobald aber die 1. Transaktion die Sperre aufhebt, kann die lesende Transaktion nun diese Daten mitlesen.
Bei der Oracle-DB ist das i.Ü. genauso, ebenso der SQL-Server:
https://learn.microsoft.com/en-us/sql/t ... rver-ver16
Siehe ab "READ COMMITTED".

Die Firebird verhält sich also genau so, wie sie sich bei ReadCommittted verhalten muss.

Da nun auch bei unserem Konzept und bei größeren Web-Installationen nun ab und zu seltsame Ergebnisse ergeben, muss ich bzgl. der Dashboards tatsächlich zur Sicherheit auf Snapshot umstellen. Denn leider hat es sich im Ablauf ergeben, dass auch tagsüber willkürlich verteilt ETL-Prozesse laufen. Diese fassen zwar Delete/Insert in eine Transaktion und per Definition dürfen 2 ETL's in dieselbe Tabelle nicht laufen, aber beim Web weiß man halt nie, welcher User gerade diese Daten für sein Dashboard abfragt. Somit wird vermutlich da ebenso der Effekt auftreten, dass die Daten in sich nicht konsistent sind.

Fazit:
Die FB vehält sich per Definition bei ReadCommitted korrekt, da eben sog. Phantom-Reads zulässig sind. Daher braucht da nichts geändert oder automatisch umgestellt werden.
Und ich muss für meine Dashboards eben auf Snapshot umstellen.
Benutzeravatar
martin.koeditz
Beiträge: 446
Registriert: Sa 31. Mär 2018, 14:35

Die FB vehält sich per Definition bei ReadCommitted korrekt, da eben sog. Phantom-Reads zulässig sind. Daher braucht da nichts geändert oder automatisch umgestellt werden.
Und ich muss für meine Dashboards eben auf Snapshot umstellen.
Danke für deine ausführliche Arbeit. Das hilft uns anderen ebenfalls in solchen Fällen weiter.

Gruß
Martin
Martin Köditz
it & synergy GmbH
vr2
Beiträge: 219
Registriert: Fr 13. Apr 2018, 00:13

Hi zusammen,

im Dunstkreis ReadConsistency und SKIP LOCKED gibt es gute Nachrichten, SKIP LOCKED wird zukünftig mit allen drei Sub-Levels von ReadCommitted laufen, bisher (aktueller Snapshot FB5 RC1 https://github.com/FirebirdSQL/snapshot ... hot-master noch nicht mit NO RECORD VERSION, aber seit 14.9.23 auch mit RECORD VERSION, mit READ CONSISTENCY lief es ja von Anfang an. Und gleich nach dem Release von FB 5 auch mit NO RECORD VERSION. .

Für uns bedeutet das, dass wir uns weiterhin aussuchen können, welches ReadCommitted Sub-Level wir verwenden. Wer also innerhalb PSQL weiterhin volle ReadCommitted-Sichtbarkeit/Nebenläufigkeit haben will, bekommt sie, ohne Einschränkung der übrigen Funktionalität. Einfach in der firebird.conf den Schalter ReadConsistency = 0.

Gleichzeitig wird (nun ohne Einschränkung auf bestimmte Sub-Level) mit SKIP LOCKED ein einfacher und robuster Mechanismus zur Steuerung von nebenläufiger Ressourcennutzung und ein vollwertiger Queueing-Mechanimus Sprachbestandteil, der weit über die bisherigen Möglichkeiten WAIT_TXen, DB-gestütze "Semaphoren" hinausgeht. Aus solchen Gründen wurde Firefox von C++ auf Rust umgestellt!

Hier aus einer Mail von Vlad:
Current plan is to not delay 5.0 and release current code, with SKIP LOCKED not working properly with NO RECORD VERSION mode and with some performance penalty for UPDATE and DELETE statements, as I described in fb-devel recently. Current snapshot should work with all other transaction isolation levels, including READ COMMITTED RECORD VERSION mode.

Shortly after release, we're going to fix the SKIP LOCKED implementation to make it work equally well in all modes, including NO RECORD VERSION.
I had a hard time to get the topic ReadConsistency across in the German Firebird forum. Most users here are not aware of the consequences.
This is our weak side - not enough of good docs that could explain such non-obvious details for end users. And thank you for taking this task within German community!
Ich könnt ihn knutschen ;-)

Grüße, Volker
bfuerchau
Beiträge: 490
Registriert: Mo 7. Mai 2018, 18:09
Kontaktdaten:

Warum? Man muss halt nur die Doku bzgl. Transaktionen lesen um zu erkennen, dass sich die FB auch bisher nicht falsch verhalten hat.
Ich muss leider in letzter Zeit aber immer häufiger feststellen, dass der Spruch "Lesen bildet" immer weniger zur Anwendung kommt.
Heute ghets eher darum "ein Bild sagt mehr als 1000 Worte", aber der Kontext ist jeweils ein anderer. Ich versuche mir gerade ein Bild der ReadCommitted-Transaktion vorzustellen.
Dies müsste dann ein Timeline-Bild mit Müllbeuteln und Einkaufstüten sein. :ugeek:
Groffy
Beiträge: 78
Registriert: Do 12. Apr 2018, 23:14

Großes Lob, dass direkt mit der Veröffentlichung der RC1 auch die Language Reference in der Version 5 dazu veröffentlicht wird.
Antworten