AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken [Firebird 2.1] Statement zu einer offenen Transaktion finden
Thema durchsuchen
Ansicht
Themen-Optionen

[Firebird 2.1] Statement zu einer offenen Transaktion finden

Ein Thema von alzaimar · begonnen am 24. Feb 2009 · letzter Beitrag vom 5. Apr 2009
Antwort Antwort
Seite 1 von 2  1 2      
alzaimar
(Moderator)

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

[Firebird 2.1] Statement zu einer offenen Transaktion finden

  Alt 24. Feb 2009, 20:41
Datenbank: Firebird • Version: 2.1 • Zugriff über: IBExpert
Ich habe hier eine Firebird-DB, die mit der Zeit immer langsamer wird. Nach und nach kristallisiert sich heraus, das offene Transaktionen dafür verantwortlich sind. Nun gibt es seit FB 2.1 diese tollen MON$-Tabellen, mit denen man ziemlich viel über den aktuellen Zustand von FB heraus bekommt.

Frage: Wie bekomme ich alle Statements zu einer bestimmten Transaktion heraus? Geht das mit den MON$-Tabellen?
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von IBExpert
IBExpert

Registriert seit: 15. Mär 2005
672 Beiträge
 
FreePascal / Lazarus
 
#2

Re: [Firebird 2.1] Statement zu einer offenen Transaktion fi

  Alt 24. Feb 2009, 20:56
mit IBExpert den Menüpunkt services-database monitoring öffnen und nachschauen (leider nur in der vollversion

wenn du MON$ATTACHEMNTS, MON$STATEMENTS und MON$ATTACHEMENTS öffnest sind die aber auch so relativ selbsterklärend, jedenfalls ide wichtigen Teile.
und ein Blick in die Firebird 2.1 Releasenotes klärt auch den Rest auf
Holger Klemt
www.ibexpert.com - IBExpert GmbH
Oldenburger Str 233 - 26203 Wardenburg - Germany
IBExpert and Firebird Power Workshops jederzeit auch als Firmenschulung
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

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

Re: [Firebird 2.1] Statement zu einer offenen Transaktion fi

  Alt 24. Feb 2009, 21:59
Toll, danke... Falls ich nicht weiterkomme, trudelt ne Bestellung für die VV ein.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#4

Re: [Firebird 2.1] Statement zu einer offenen Transaktion fi

  Alt 24. Feb 2009, 22:36
Um solche Schlawiner rauszufinden setze ich ab & zu das unten ab.
Die "Abfrage" gibt dir oben die älteste aktive Transaktion und zu jeder Transaktion den host, prozessname, user, etc.
Alles schön untereinander, so dass man nicht wie blöde nach links und rechts scrollen muss.
SQL-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
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.859 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: [Firebird 2.1] Statement zu einer offenen Transaktion fi

  Alt 24. Feb 2009, 23:15
Hallo,

irgendwie kann ich den Menüpunkt: service-Database monotoring nicht finden. Ich besitze eine gekaufte Version, oder ist dieser Menüpunkt erst in einer neuern IBExpert-Version vorhanden?

Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Benutzerbild von IBExpert
IBExpert

Registriert seit: 15. Mär 2005
672 Beiträge
 
FreePascal / Lazarus
 
#6

Re: [Firebird 2.1] Statement zu einer offenen Transaktion fi

  Alt 24. Feb 2009, 23:36
Zitat von Chemiker:
Hallo,

irgendwie kann ich den Menüpunkt: service-Database monotoring nicht finden. Ich besitze eine gekaufte Version, oder ist dieser Menüpunkt erst in einer neuern IBExpert-Version vorhanden?

Bis bald Chemiker
wichtig: in der Datenbankregistrierung muss als Typ FB21 gewählt sein
Holger Klemt
www.ibexpert.com - IBExpert GmbH
Oldenburger Str 233 - 26203 Wardenburg - Germany
IBExpert and Firebird Power Workshops jederzeit auch als Firmenschulung
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.859 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: [Firebird 2.1] Statement zu einer offenen Transaktion fi

  Alt 24. Feb 2009, 23:47
Hallo IBExpert,

ist damit gemeint die Serverversion: Firebird 2.1?

Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Benutzerbild von IBExpert
IBExpert

Registriert seit: 15. Mär 2005
672 Beiträge
 
FreePascal / Lazarus
 
#8

Re: [Firebird 2.1] Statement zu einer offenen Transaktion fi

  Alt 24. Feb 2009, 23:52
Zitat von Chemiker:
Hallo IBExpert,

ist damit gemeint die Serverversion: Firebird 2.1?

Bis bald Chemiker
ja
Holger Klemt
www.ibexpert.com - IBExpert GmbH
Oldenburger Str 233 - 26203 Wardenburg - Germany
IBExpert and Firebird Power Workshops jederzeit auch als Firmenschulung
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.859 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: [Firebird 2.1] Statement zu einer offenen Transaktion fi

  Alt 25. Feb 2009, 00:07
Hallo IBExpert,

danke, hat funktioniert Menü-Punkt gefunden.

Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

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

Re: [Firebird 2.1] Statement zu einer offenen Transaktion fi

  Alt 25. Feb 2009, 14:41
Hi,

Erfolgsmeldung

Die Tipps aller und speziell die Query von Elvis haben mir geholfen. Ich verwende dbExpress und habe einige TSQLQuerys offen gehalten. Die habe ich durch TSimpleDataset ersetzt, wobei ich noch nach dem Einlesen der Daten die interne Connection wieder geschlossen habe.

Anschließend hatte ich 0-2 aktive Transaktionen, anstatt 6 (und einem Uralt-Übeltäter)

Hintergrund: Zwischengespeicherte Messwerte müssen an einen Client übertragen werden. Manchmal isser da, manchmal eben nicht. Wenn er nicht da ist, werden die Daten in einer FB-DB gepuffert. Nun teste ich den Extremfall, das der Client nach einigen Tagen erst wieder online und die DB in der Zwischen auf 500MB angeschwollen ist.

Ich lese also jeweils 10000 Messwerte aus der DB ein und schicke diese in Häppchen à 70 Stück (Limitierung des Clients) mit XML an den Client. Diese 10000er TSQLQuery war aber die ganze Zeit offen (klar, ich muss ja alle Daten verschicken).

Die Messapplikation hat aber in der Zwischenzeit kräftig neue Messergebnisse fabriziert und diese in die DB geschrieben. Und genau diese Schreiboperation wurde immer langsamer, da obige (TSQLQuery)-Transaktion offen war.

So erkläre ich mir das jedenfalls. Was ich allerdings 'gewöhnungsbedürftig' finde, ist die Tatsache, das eine Query offensichtlich eine Transaktion öffnet. Aber gut, wenn das so ist.

PS: Ein sehr hübsches Monitoring-Tool ist von 'Sinática'. Ich mach da jetzt keine Werbung, weil das Tool nicht sonderlich viele Features hat, aber schön anzusehen ist es allemal. Es lohnt -aus rein ästhetischen Gesichtspunkten- sich das Teil mal anzuschauen.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  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 12:59 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