AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Firebird schließt Verbindungen nicht... 100% CPU last
Thema durchsuchen
Ansicht
Themen-Optionen

Firebird schließt Verbindungen nicht... 100% CPU last

Ein Thema von Sascha-L · begonnen am 14. Nov 2007 · letzter Beitrag vom 22. Nov 2007
Antwort Antwort
Seite 1 von 2  1 2      
Sascha-L

Registriert seit: 14. Nov 2007
Ort: Finnentrop
50 Beiträge
 
Delphi 7 Professional
 
#1

Firebird schließt Verbindungen nicht... 100% CPU last

  Alt 14. Nov 2007, 07:51
Datenbank: Firebird • Version: 1.5 • Zugriff über: Delphi 4 BDE
Guten Tag,

Ich habe folgendes Problem:

Ich habe mehrere Datenbanken auf einem Server liegen, auf diesen Server greifen mehrere PC´s mit jeweils meherern Programmen zu.
Ich benutze Firebird 1.5 und das System läuft auch schon seit mehreren Jahren Stabil, jedoch habe ich seit neustem das Problem, dass Firebird einfach nicht mehr reagiert und kein client mehr auf die Datenbanken zugreifen kann. Auffällig ist hierbei dass der Firebird zu viele offene Verbindungen hat und teilweise eine CPU last von 100% verursacht. Die Programme, die auf die Datenbanken zugreifen wurden mit Delphi 4 Programmiert und verwenden die BDE.

Wenn Probleme während des Zugriffs auf die Datenbank auftreten sollten, werden diese mit einem 'Try - Except' Block abgefangen um Fehler zu vermeiden. Ist es Sinnvoll, den Datenbank aufruf nocheinmal zu versuchen, wenn Fehler aufgetreten sind oder eher nicht ?

Hier ist mal ein Auszug des Delphicodes, der für den Datenbankzugriff zustaändig ist:

Delphi-Quellcode:
Begin
  //H_UnWert := StrToIntDef(Edit1.text,0);
  H_UnWert := StrToIntDef(Edit1.Text,0);
  H_ObWert := StrToIntDef(Edit2.Text,0);
  Query1.DisableControls;
  If DataBase1.InTransaction = False Then DataBase1.StartTransaction;
  Try
   With Query1 Do
    Begin
      Close;
      SQL.Clear;
      HlpStr := 'Select * From ReadAuftragsHeaderIntervall(';
      HlpStr := Concat(HlpStr,IntToStr(H_UnWert),',',IntToStr(H_ObWert),')');
      SQL.Add(HlpStr);
      Active := True;
      DataBase1.Commit;
    End;
  Except
    DataBase1.RollBack;
  End;
  Query1.EnableControls;
End;
Meine Fragen sind nun:

1. Woran könnte es liegen, dass aufeinmal diese Probleme auftreten ?
2. Gibt es ein Tool oder ein Programm mit dem ich herausfinden kann welche(s) Programm(e) die Probleme verursacht ?

Ich hoffe, ihr könnt mir weiterhelfen

MfG Sascha
Sascha Lütkemeier
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Firebird schließt Verbindungen nicht... 100% CPU last

  Alt 14. Nov 2007, 08:07
Zu 1.
Ich tippe mal auf die BDE...
Prüfe mal, wenn du nicht von der BDE weg kannst/willst, ob du bei Programmende immer schön brav deine Connections schliesst. Vielleicht hilft das (temporär)!
  Mit Zitat antworten Zitat
Sascha-L

Registriert seit: 14. Nov 2007
Ort: Finnentrop
50 Beiträge
 
Delphi 7 Professional
 
#3

Re: Firebird schließt Verbindungen nicht... 100% CPU last

  Alt 14. Nov 2007, 08:24
Vielen Dank,

Ich weiß, dass die BDE überholt ist, jedoch bleibt (zumindest im Moment) keine andere Möglichkeit für mich als die BDE zu verwenden.
Bezüglich der nicht geschlossenen Verbindungen, ist dass so eine Sache mit dem kontrollieren, wie gesagt es sind mehrere Programme, dessen Umfang auch nicht gerade gering ist, desswegen fragte ich ja nach einem Tool, dass mir anzeigt welche Clients bzw. Programme die Probleme verursacht. Es würde auch schon reichen, wenn ich wie bei MS SQL (einen Profiler) einfach mitlaufen lassen könnte, was mir jede Aktion mitlogt. Jedoch ist mir soetwas für Firebird nicht bekannt

MfG Sascha
Sascha Lütkemeier
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Firebird schließt Verbindungen nicht... 100% CPU last

  Alt 14. Nov 2007, 08:52
Solche tools gibt es schon, z.B. von CRlabs als Teil der IBDAC-Komponenten oder anderen Logmanagern. Die IBDAC-Kompos bieten auch einen Experten welche dir Helfen die BDE abzulösen.
Markus Kinzler
  Mit Zitat antworten Zitat
Sascha-L

Registriert seit: 14. Nov 2007
Ort: Finnentrop
50 Beiträge
 
Delphi 7 Professional
 
#5

Re: Firebird schließt Verbindungen nicht... 100% CPU last

  Alt 21. Nov 2007, 07:33
Danke, könnte mir jemand sagen was genau dass für Tools sind, bzw wo ich diese herbekomme, ich möchte hier nochmal ausdrücklich sagen, dass es für mich im Moment keinerlei Möglichkeiten gibt von der BDE wegzukommen, es wäre sehr Hilfreich, wenn Ihr ein paar Links posten könntet.

MfG Sascha
Sascha Lütkemeier
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Firebird schließt Verbindungen nicht... 100% CPU last

  Alt 21. Nov 2007, 07:42
Warum kannst du nicht weg von der BDE?
http://crlab.com/ibdac/

http://crlab.com/dbmonitor/download.html
http://www.hk-software.net/h-k.de/Produkte/IBMonitor
http://www.upscene.com/products/audit/iblm_main.htm
...
Markus Kinzler
  Mit Zitat antworten Zitat
Sascha-L

Registriert seit: 14. Nov 2007
Ort: Finnentrop
50 Beiträge
 
Delphi 7 Professional
 
#7

Re: Firebird schließt Verbindungen nicht... 100% CPU last

  Alt 21. Nov 2007, 07:50
Ich Arbeite in einem Team an diesem Projekt, denn alleine wäre es unmöglich alle Clients up to date zu halten, also ist der eigendliche Grund nur ein Zeitfaktor, der es mir nicht erlaubt, alle Programme BDEfrei zu machen, aber danke für die Links, ich werde bescheit sagen, sobald ich mehr weiß.


MfG Sascha L.
Sascha Lütkemeier
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Firebird schließt Verbindungen nicht... 100% CPU last

  Alt 21. Nov 2007, 08:00
Wie gesagt besitzt IBDAC einen Experten, der dir hilft das Programm von BDE auf IBDAC umzusetzen.
Markus Kinzler
  Mit Zitat antworten Zitat
PaulJr

Registriert seit: 9. Feb 2007
Ort: Stuttgart
66 Beiträge
 
#9

Re: Firebird schließt Verbindungen nicht... 100% CPU last

  Alt 21. Nov 2007, 08:26
Hallo Sascha,

eine Bemerkung zu Deiner Source-Code:

Eine Transaction hat an dieser Stelle überhaupt kein Sinn. Das Gleiche gilt für Commit.

Ich würde das z.B. so programmieren (einen von sehr vielen Varianten die man an dieser Stelle programmieren könnte):

Delphi-Quellcode:
Begin
   //H_UnWert := StrToIntDef(Edit1.text,0);
   H_UnWert := StrToIntDef(Edit1.Text,0);
   H_ObWert := StrToIntDef(Edit2.Text,0);
   Try
    With Query1 Do
      Begin
         DisableControls;
         if Active then
            Close;
         SQL.Clear;
         HlpStr := 'Select * From ReadAuftragsHeaderIntervall(';
         HlpStr := Concat(HlpStr,IntToStr(H_UnWert),',',IntToStr(H_ObWert),')');
         SQL.Add(HlpStr);
         try
            Open;
         finally
            EnableControls;
         end;
      End;
   Except
      ON E:Exception do
      begin
         EnableControls;
         MessageDlg(E.Message , mtError, [mbOk], 0);
         Sysutils.Abort;
      end;
   End;
End;
Viele Grüße

PaulJr
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: Firebird schließt Verbindungen nicht... 100% CPU last

  Alt 21. Nov 2007, 16:02
Halo,

wieso hat eine Transaktion hier keinen Sinn ??

Ohne diese Transaktiomn erzeugt die BDE selbst eine.
Gerade durch diese "manuellen" Transaktionen
erzeugt die BDE nicht bei jeder Aktion selbst eine Transaktion.
OK, hier ist es mal nicht notwendig, schadet aber auch nicht.

Was mich eher stört ist das hier.

If DataBase1.InTransaction = False Then DataBase1.StartTransaction; Warum ist kann eine Transaktion offen sein ?
Das darf (naja sollte) nicht sein.

Das sieht wie Code aus, wo der Programmierer
manchmal an einer offenen Transaktion vorbeicoden muss.

Und genau diese offenen Transaktionen erzeuge auf dem SQL-Server
immer mehr Last (OAT, OIT).

Ich schreibe das immer so.

Delphi-Quellcode:
DataBase1.StartTransaction;
try
  // query bla
  // ev. auch eine DataBase1.RollBack;
finally
  if DataBase1.InTransaction then DataBase1.Commit;
end;

Heiko
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 05:25 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