Hallo,
Wir haben in letzter Zeit zunehmende Probleme mit Deadlock- Meldungen aus Firebird.
Im Einsatz sind verschiedene Firebird- Version (1.5, 2.1, 2.5).
Es ist nicht erkennbar, dass es bei einer bestimmten Version häufiger auftritt als bei anderen.
Unsere Anwendung (Warenwirtschaft, in Delphi 7 erstellt, Datenzugriffskomponenten auf Basis FIBPlus) arbeitet meist im Mehrbenutzermodus auf mehreren Arbeitsplätzen simultan mit der selben Datenbank.
Beim Erstellen eines Beleges (z.B. Rechnung) werden nacheinander einzelne Positionen der Rechnung erfasst. Beim Speichern der Position wird nun per Trigger (active after insert or update or delete) eine Stored Procedure aufgerufen, die die Werte und Mengen dieser Position in einer Statistiktabelle aktualisiert.
Und genau hier bei dieser Statistiktabelle treten ab und an Deadlocks auf, die letztlich die Verbuchung der Position verhindern.
Im Bereich der manuellen Erfassung von Belegen könnte man das Ganze noch an der Oberfläche abfangen, es gibt aber auch automatische Abläufe, in denen Positionen programmgesteuert angelegt werden. Auftretende Deadlocks in diesem Bereich haben uns bereits mehrfach heftige Probleme bereitet – bis hin zu Datenverlusten.
Fragen:
1. Gibt es auf Ebene der Trigger die Möglichkeit, einen Ablauf der Art
try
Aufruf der Verbuchungsprozedur
except
Warte ein Weilchen...
Aufruf der Verbuchungsprozedur
...
end;
zu realisieren?
2. Würde es Sinn machen, die „Post“- Prozedur der Datenzugriffskomponenten in eine solche Struktur zu packen?
try
Post;
except
Deadlock?
Dann warte ein Weilchen...
Post;
...
end;
Wir haben in letzter Zeit zunehmende Probleme mit Deadlock- Meldungen aus Firebird.
Im Einsatz sind verschiedene Firebird- Version (1.5, 2.1, 2.5).
Es ist nicht erkennbar, dass es bei einer bestimmten Version häufiger auftritt als bei anderen.
Unsere Anwendung (Warenwirtschaft, in Delphi 7 erstellt, Datenzugriffskomponenten auf Basis FIBPlus) arbeitet meist im Mehrbenutzermodus auf mehreren Arbeitsplätzen simultan mit der selben Datenbank.
Beim Erstellen eines Beleges (z.B. Rechnung) werden nacheinander einzelne Positionen der Rechnung erfasst. Beim Speichern der Position wird nun per Trigger (active after insert or update or delete) eine Stored Procedure aufgerufen, die die Werte und Mengen dieser Position in einer Statistiktabelle aktualisiert.
Und genau hier bei dieser Statistiktabelle treten ab und an Deadlocks auf, die letztlich die Verbuchung der Position verhindern.
Im Bereich der manuellen Erfassung von Belegen könnte man das Ganze noch an der Oberfläche abfangen, es gibt aber auch automatische Abläufe, in denen Positionen programmgesteuert angelegt werden. Auftretende Deadlocks in diesem Bereich haben uns bereits mehrfach heftige Probleme bereitet – bis hin zu Datenverlusten.
Fragen:
1. Gibt es auf Ebene der Trigger die Möglichkeit, einen Ablauf der Art
try
Aufruf der Verbuchungsprozedur
except
Warte ein Weilchen...
Aufruf der Verbuchungsprozedur
...
end;
zu realisieren?
2. Würde es Sinn machen, die „Post“- Prozedur der Datenzugriffskomponenten in eine solche Struktur zu packen?
try
Post;
except
Deadlock?
Dann warte ein Weilchen...
Post;
...
end;
Comment