Re: Firebird plötzlich langsam...
18. Feb 2009, 09:11
Hallo,
wie sieht die Transaktionsbehandlung in den beiden Programmen aus?
Eine Transaktion für die gesamte Programmlaufzeit?
Oder jedes Statement in einer Transaktion bzw. klar definierte Transaktionsklammern?
Kann es sein, dass das Löschprogramm schon Daten wegwirft, bevor das Füllprogramm mit seiner Transaktion für diese Daten fertig ist?
Meine bisherige praktische Erfahrung ist (datenbankunabhängig):
Je mehr Daten in einer Transaktion eingefügt und/oder gelöscht werden, um so langsamer wird das.
Wie sieht das mit den Indizes aus?
Gibt es da viele, die permanent aktualisiert werden müssen?
Das kann durchaus auch schon mal zu 'ner Spassbremse werden.
Anstatt die Datenbank gewaltsam neu zu starten, wäre es einen Versuch wert, die Programme einzeln mal zu beenden und dann neu zu starten. Wenn sich das Verhalten dann ändert, stimmt in dem beendeten und neu gestarteten Programm das Transaktionshandling (höchstwahrscheinlich) nicht. So ein Test kann aber schon mal Stunden/Tage dauern, da man ja nie so genau weiß, wann die Schmerzgrenze bei der Datenbank erreicht ist.
Eine unelegante Methode, dieses Problem zu umgehen ist:
Arbeitsschritt- oder zeitabhängig (kommt auf die Programmlogik an) die Datenbankverbindung der Anwendung zu schließen und wieder neu aufzubauen. Dabei werden (in der Regel) Reste, die auf eine ungeschickte Programmierung zurückzuführen sind (offenen Transaktionen...) abgebaut und eine neue, saubere Verbindung hergestellt.
Diese Methode hilft auch, wenn man Datenbanktreiber/-schnittstellen benutzen muss, die leicht fehlerhaft sind und bei permanenter Benutzung zu Problemen führen.
|