AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Firebird Connection Timeout beeinflussen
Thema durchsuchen
Ansicht
Themen-Optionen

Firebird Connection Timeout beeinflussen

Ein Thema von ChrisE · begonnen am 8. Aug 2011 · letzter Beitrag vom 8. Aug 2011
Antwort Antwort
Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Firebird Connection Timeout beeinflussen

  Alt 8. Aug 2011, 12:19
Datenbank: Firebird • Version: 2.5 • Zugriff über: IBDAC
Hallo,

irgendwie bekomme ich es nicht raus, wie ich den Connection-Timeout bei Firebird einstellen kann. Folgendes Problem:
Ein Verbindung soll hergestellt werden zu Server:serv/port mit User:ben und Passwort:pass von Client:A mit der FireBird-Emb-DLL und IBDAC.

Jetzt kann es sein, dass der Server an sich schon erreichbar ist (IP-Ping), aber der Dienst nicht erreichbar ist auf dem angegebene Port. Wird dann Connect aufgerufen, dauert es ca. 60 Sekunden bis der Timeout kommt. In dieser Zeit friert die Anwendung komplett ein. Das würde sich lösen lassen durch einen Thread der das Connect aufruft. Aber nichts desto trotz scheint mir die Dauer bis der Timeout kommt doch recht hoch. Ich möchte Sie gerne beeinflussen können.

Leider finde ich nichts dazu über google & Co.
Wenn ich die Verbindungsparameter anpassen möchte per IBCConnection.Params.Add('connect_timeout=5'); , kommt nur not supported von IBDAC. Ich sehe, dass es diesen Parameter gibt (in der IBDAC-Deklaration) und das er korrekt geparst wird - dennoch wird er offensichtlich nicht unterstützt.
Generell würde mich aber interessieren, ob es hier überhaupt einen weg gibt, die Zeit zu beeinflussen oder zumindest zu testen, ob der Dienst da ist.

Gruß, Chris
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules
  Mit Zitat antworten Zitat
Piethan

Registriert seit: 2. Jun 2008
Ort: Köln
43 Beiträge
 
Delphi XE Architect
 
#2

AW: Firebird Connection Timeout beeinflussen

  Alt 8. Aug 2011, 12:37
Hallo Chris,

schaue doch mal in der firebird.conf dort gibt es zwei Parameter.

Code:
#ConnectionTimeout = 180
Code:
#DeadlockTimeout = 10
Jedoch finde ich die Antwortzeit seltsam, tritt dies nur beim Lesen auf, dies kann ja schon mal sein, oder auch beim Schreiben?

Hast du eventuell einen schlechten Index, der beim Insert Zeit frisst? Ich hatte dieses Problem mal, weil einer der Gateways
(Stück Software zwischen DB und Software) zuwenig Speicher hatte und dort die Transaktionen aufliefen, aber auch ein
Neustart der Switch hatte mir mal geholfen. Bei mir liegt das Problem fast nie an der DB selber.

Prüfe doch mal ob noch Transaktionen offen sind!

Code:
execute block
returns
(
  Kind varchar(30),
  ID bigint,
  Time_Stamp timestamp,
  Data blob sub_type text,
  State integer
)
as
  declare userName varchar(256);
  declare dbName varchar(256);
  declare tid bigint;
  declare aid bigint;
begin
  for select
    mon$timestamp,
    mon$state,
    mon$transaction_id,
    mon$attachment_id
  from
    mon$transactions t
-- where
-- mon$transaction_id = t.mon$oldest_active
  order by
    case when mon$transaction_id = t.mon$oldest_active then
      0
    else
      1
    end,
    mon$transaction_id
  into
    :Time_Stamp, :State, :ID, :AID
  do
  begin
    Data = null;
    Kind = 'Transaction';
    suspend;
    TID = ID;

    for select
      trim(mon$remote_address)
      ||' -> '|| trim(mon$remote_process),
      mon$remote_pid,
      mon$user,
      mon$attachment_name
    from
      MON$ATTACHMENTS
    where
      mon$attachment_id = :AID
    into
      :Data, :ID, :userName, :dbName
    do
    begin
      State = null;
      Kind = 'Process';
      suspend;
     
      ID = null;
      Kind = 'Database';
      Data = dbName;
      suspend;
     
      Kind = 'User';
      Data = userName;
      suspend;
     
      Kind = 'Statement';
     
      for select
        mon$statement_id,
        mon$timestamp,
        mon$sql_text,
        mon$state
      from
        MON$STATEMENTS
      where
        mon$transaction_id = :tid
        and mon$attachment_id = :aid
      into
        :ID, :Time_Stamp, :Data, :State
      do
        suspend;
    end
  end
end
LG
Dirk
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.029 Beiträge
 
Delphi XE3 Enterprise
 
#3

AW: Firebird Connection Timeout beeinflussen

  Alt 8. Aug 2011, 12:39
Vielleicht könntest Du den Port kurz ansprechen bevor Du die Verbindung zu FB aufmachst Link zu Portscanner
Martin Schaefer
  Mit Zitat antworten Zitat
Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: Firebird Connection Timeout beeinflussen

  Alt 8. Aug 2011, 12:55
Hallo,

@Dirk:
nein, das hat nichts mit Antwortzeit bei einer bestehenden Verbindung zu tun. Das hat schlicht mit dem Verbindungsversuch (Connect) selber zu tun. Es besteht derzeit noch keine Verbindung. Diese soll erst aufgenommen werden. Und bei der aufnahme der Verbindung gibt es eben den Timeout, weil der Server / Dienst etc. nicht erreichbar ist.
Der Parameter
Code:
ConnectionTimeout = <WertInSekunden>
scheint nur zu beeinflussen, wann bei bestehender Verbindung als unterbrochen gilt. Er scheint nicht für den Verbindungsaufbau zu gelten
Der Parameter
Code:
DeadlockTimeout = 10
war mir bisher nicht bekannt. Werd ich gleich mal nachschauen wofür der da ist.

@mschaefer:
Danke, dass werd ich mir gleich mal anschauen. Interessant wäre, aber ich dadurch nicht nur die Aussage erhalte ob ein Port offen ist, sondern auch ob man dort eine "Antwort" erhält. Das an sich dürfte schwierig werden, da ja jeder Dienst etc. hinter einem Port stehen könnte...

Gruß, Chris
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules
  Mit Zitat antworten Zitat
kretabiker

Registriert seit: 10. Mär 2005
Ort: Bargteheide
183 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Firebird Connection Timeout beeinflussen

  Alt 8. Aug 2011, 14:05
Hallo ChrisE,

wie willst du dich mit der Datenbank verbinden? Wenn ich es richtig sehe, verwendest du Embedded, richtig? Da sind nur lokae Verbindungsprotokolle möglich, jedoch keine TCP/IP (auch nicht via localhost oder 127.0.0.1). Aus der Doku:

2.2. Database access

Client access can be only via the local protocol,
i.e. NOT a TCP/IP connection string that includes
the server name "localhost" or IP address 127.0.0.1.

The embedded server supports only the local connection
to a database file path without a server name.

Vielleicht liegt derin die Ursache?

Viele Grüße

Udo
Udo Treichel
  Mit Zitat antworten Zitat
Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: Firebird Connection Timeout beeinflussen

  Alt 8. Aug 2011, 14:16
Hallo Udo,

vielen Dank für den Hinweis - allerdings läuft auf dem "Server" der Firebird-Dienst und auf dem Client befindet siche keine FB-Installation. Auf dem Client werden die FB-Emb-Files mit ins Install-Verzeichnis der Software gepackt. Ich habe also keine direkte Verbindung zu einem DB-File sondern tatsächlich zu einem Dienst per TCP/IP.

Aber der Vorschlag von mschaefer bringt zumindest ein Workarround. Manchmal sieht man den Wald vor lauter Bäumen nicht Eine einfache TCP-Verbindung zu Serverort aufbauen und schauen ob es klappt oder nicht mit Timeout. Realisiert (für mich am einfachsten) mit einem Indy-TCPCLient

Danke erstmal dafür.

Nichts desto trotz würde mich schon interessieren, ob man das nicht auch direkt mit der Firebird-DLL machen kann bzw. mit IBDAC?

Gruß, Chris
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules
  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 12:16 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