Einzelnen Beitrag anzeigen

Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#4

Re: Firebird deadlock Strategie

  Alt 23. Jun 2006, 09:36
Zitat von mquadrat:
Ich würde jeden Datensatz in einer eigenen Transactionen zurückschreiben. Dann kannst du im Try..except Block eine Liste mit allen fehlerhaften Updates führen und dem Benutzer beispielsweise die Zeilen rot markieren, an denen es ein Konflikt gab. So würden wenigstens die geschrieben, die konfliktfrei sind.
mit der Gefahr eine Inkonsistente Datenbank zu erhalten? Dieses System funktioniert nur, wenn die Daten nichts miteinander zu tun haben!

Zitat von hanspeter:
Warum und wann der deadlook kommt ist mir schon klar.
Gut für dich... mir ist es nicht klar wann er kommt. Doch eigentlich ist es mir schon klar, ein Deadlock kann nur dann kommen, wenn 2 unterschiedliche Transaktionen zu selben Zeit ein und denselben Datensatz ändern wollen. Was mir nicht klar ist, warum er bei dir kommt, weil du die Transaktion vor dem Schreiben NEU öffnest. Gut, wenn die Datenbank unter "Dauerfeuer" steht und immer neue Daten eingetragen werden, die automatische Änderungen an Tabellen zur Folge haben (Beispiel folgt), kann es durchaus schnell zu Deadlocks kommen:

Beispiel Bestellsystem: Wenn eine Bestellung eingegeben wird, soll neben dem Bestellzettel auch der Warenbestand aktualisiert werden. Wenn mehrere User Bestellungen eintippen kommt es zwangsläufig zu einem Deadlock, wenn man die Warenaktualisierung innerhalb einer StoredProcedure bzw. duch einen Trigger vornimmt.

Als Lösungsmöglichkeit bietet sich an, die Struktur dahingehend umzubauen, dass ein Bestellpool eingerichtet wird. Schlägt die automatische Aktualisierung des Inventars aufgrund eines Deadlocks fehl, wird in dem Pool ein neuer Datensatz angelegt, in dem die Artikelnummer und die Anzahl gespeichert wird. Diese Tabelle wird vom System dann hin und wieder abgearbeitet und in die eigentliche Tabelle umgeschrieben. Das bedeutet aber auch, dass bei einer Verfügbarkeitsprüfung diese Tabelle ebenfalls berücksichtigt werden muss.

Wie gesagt: Mir ist nicht klar, warum es bei Dir unbedingt zu dem Deadlock kommt, außer die beiden ändern dauernd den gleichen Datensatz (vergiss bitte die oben beschriebenen automatismen nicht) und speichern diesen auch gleichzeitig ab.


Grüße
Lemmy
  Mit Zitat antworten Zitat