Einzelnen Beitrag anzeigen

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