AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Firebird plötzlich langsam...
Thema durchsuchen
Ansicht
Themen-Optionen

Firebird plötzlich langsam...

Ein Thema von alzaimar · begonnen am 17. Feb 2009 · letzter Beitrag vom 18. Feb 2009
Antwort Antwort
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#1

Firebird plötzlich langsam...

  Alt 17. Feb 2009, 22:20
Datenbank: Firebird • Version: 2.1 • Zugriff über: DBExpress und IB
Ahoj

Heute komme ich zu einem Kunden, dort ist ein PC, auf dem Firebird 2.1 sowie zwei Delphi-Apps laufen.
Die eine App bläst ständig Daten in die DB, die andere liest sie wieder aus und löscht sie. Fragt bitte nicht nach dem Sinn dieser Geschichte, aber so isses jedenfalls. Normalerweise ist das System recht flott und belastet den PC nicht sonderlich.

Firebird war aber ziemlich lahm: anstatt für eine bestimmte Transaktion 100ms zu verbraten, war FB nun plötzlich 500-1000ms unterwegs, um 10 Zeilen in eine an sich leere Tabelle zu schreiben. Ich bin mir 99,9% sicher, das sonst nicht viel mit der DB los war.

Ich musste FB abschießen, woraufhin der fbguard es neu startete und anschließend war die (Performance-)Welt wieder in Ordnung.

Frage: Gibt es Zeiten, in denen FB aufräumt, sich selbst organisiert oder sonste was macht, oder wie sonst ist diese Spassbremse sonst zu erklären? Oder: Ist dieses Problem bekannt, oder sitzt es vielmehr vor dem PC (bin ich also der Depp? Ihr könnt ruhig ehrlich sein )

Großartige Fehlerursachenforschung müsst ihr nicht betreiben. Es reicht ein:
A) Sowas kommt nie vor
B) Kenn ich, da musst Du .... machen

Bonusfrage: Kann man Firebird irgendwie per Skript/Batch mal eben zum re-initialisieren bringen? Den fbserver.exe abschießen würde ich nur ungerne machen...
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von MagicAndre1981
MagicAndre1981

Registriert seit: 4. Jun 2004
Ort: Nordhausen
2.214 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Firebird plötzlich langsam...

  Alt 17. Feb 2009, 22:23
da ist noch eine alte Transaktion offen und wegen der MGA wird das dann langsam. Über die Monitoring Tabellen siehst du welche Transaktion offen ist und wann sie gestartet wurde
André
"A programmer is just a tool which converts caffeine into code", daran wirds wohl liegen, dass ich Abends nie pennen kann

Zitat von Luckie:
Nicht nur dass ihr offtopic geworden seid, jetzt werdet ihr selber im Offtopic noch offtopic
  Mit Zitat antworten Zitat
TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.875 Beiträge
 
Delphi 12 Athens
 
#3

Re: Firebird plötzlich langsam...

  Alt 17. Feb 2009, 22:24
Hallo,

das riecht dannach, dass da eine Transaktion lange Zeit offen bleibt. Guck Dir dazu mal die Statistik an, die nächste Transaktion und die älteste aktive sollten nicht zu weit auseinanderliegen.

Die Aufräumarbeiten gibt es, das sog. Sweepen. Das wird hier aber vermutlich nicht der Grund für den Geschwindigkeitsverlust sein.

Die Idee mit dem erneut initialisieren würde ich ganz schnell verwerfen, das ist Vertuschen der Probleme und nicht Abstellen.

Gruß

Thomas
Thomas Breitkreuz
Gruß Thomas
- Admin DelphiPRAXIS
- Admin Delphi-Treff
- Embarcadero MVP
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: Firebird plötzlich langsam...

  Alt 18. Feb 2009, 06:12
Super, mein Verdacht ging in die Richtung. Nun muss ich los, wieder auf diese Baustelle. 'Monitoring Tabellen'.... mal sehen, was das ist.. *googel googel googel*, Ah... ja. Teste ich gleich.

Danke für die Hinweise!
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#5

Re: Firebird plötzlich langsam...

  Alt 18. Feb 2009, 08: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.
  Mit Zitat antworten Zitat
mquadrat

Registriert seit: 13. Feb 2004
1.113 Beiträge
 
Delphi XE2 Professional
 
#6

Re: Firebird plötzlich langsam...

  Alt 18. Feb 2009, 13:04
Wie du wahrscheinlich schon rausbekommen hast kannst du über die Monitoring-Tabellen sogar den lokalen Prozess identifzieren, der die Transaktion offen lässt. Voraussetzung ist, das die Clients auch 2.1 benutzen, aber wenn ich richtig gelesen habe ist das ja eh die gleiche Maschine.

Soetwas wie einen Reset gibt es auch. Einfach ein Backup und anschließend ein Restore. Da wird dann der ganze Housekeeping-Kram wie Speicher freigeben und Indizes neu aufbauen gemacht. Funktioniert natürlich nur, wenn man keinen 24 Stunden Betrieb braucht, sondern mal ein Stündchen abschalten kann.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: Firebird plötzlich langsam...

  Alt 18. Feb 2009, 22:24
So. Die Ursache lag... vielmehr...hüstel...saß... wie soll ich sagen .. nun ja, ca. 80cm vor dem Problem...

Eine Query, die sonst ein paar ms dauert, hat wohl den Server für Minuten lahm gelegt. Natürlich war da eine Transaktion aktiv, die schon etwas älter war... aber wen wunderts, wenn die Query ein wenig länger dauert als üblich. Eine Tabelle, die normalerwiese 1-10 Einträge hat, war nun bei 1,5 Mio Records angelangt. Die Torfnase, die die Query gebastelt hat, hat nicht drauf geachtet, das diese auch mal etwas länger werden könnte... Ich wars jedenfalls nicht, Ehrenwort.

Danke auf jeden Fall an Alle, denn diese Transaktions-Geschichte war der Schlüssel zur Fehlerbehebung...

Einmal mehr gilt:

@Nahpets: Die Apps einzeln mal zu beenden, hat den Schurken dann entlarvt. Es war der Gärtner, nicht der Verdächtige....

PS: Ich *hasse* es, fremden Code zu übernehmen, der dann unter Zeitdruck beim Kunden installiert werden muss...
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz