Einzelnen Beitrag anzeigen

ZOD

Registriert seit: 6. Mai 2009
97 Beiträge
 
#1

Firebird Statements "idle" trotz beendeter Abfrage

  Alt 10. Mai 2023, 15:39
Datenbank: Firebird • Version: 4.0.2 • Zugriff über: SQL Express
Hallo Zusammen,

ich beobachte auf meinem FB4 Server mit diesem Statement

Code:
select
att.mon$user,
att.mon$remote_address,
stmt.mon$sql_text,
stmt.mon$stat_id,
cast(stmt.mon$timestamp as timestamp)
from mon$attachments att
join mon$statements stmt on att.mon$attachment_id = stmt.mon$attachment_id
where
att.mon$attachment_id <> current_connection
and
stmt.mon$state in (0, 1, 2)
die Zugriffe. Infos dazu sind hier zu finden.

In meiner Anwendung verwende ich SQLExpress Komponenten (TSQLConnection und TSQLDataSet).
Der typische Ablauf (Pseydocod - nur prinzipiell) ist dann:
Delphi-Quellcode:
SQLDS : TRMSQLDataSet;
.
.
SQLDS.Active := False; //
SQLDS.Prepared := False; // ist eigentlich unötig, hier nur zur Information
SQLDS.CommandText := 'select xyz from table'; // nur Beispiel
SQLDS.Prepared := True;
SQLDS.Active := True;

... Daten werden weiter verarbeitet, dann:

SQLDS.Active := False;
SQLDS.Prepared := False;
Nun bemerke ich, dass z.B. das o.g. Statements in dieser Liste der Statements verbleiben ist, es hat mon$state = 0.

Hier ein Auszug aus der FB Doku:

Code:
MON$STATE SMALLINT Statement state: 0 - idle 1 - active 2 - stalled
Das Statement verschwindet erst, wenn die DB Verbindung von meiner Anwendung geschlossen wird.
Aktuell möchte ich wenn möglich vermeiden, dass meine Anwendung nach jeder DB Abfrage die Verbindung schließt und ggf. für die nächste Abfrage neu aufbaut.

Die Standardeinstellung der Transaktion ist
Code:
TransIsolation=ReadCommited
(wird in TSQLConnection eingestellt).

Wird beim DB-Abruf aus meiner Anwendung nun z.B. eine Stored Procedure angestprochen, so kann diese nicht neu kompiliert werden.
Ich vermute, weil das Statement in
Code:
mon$statements
aufgeführt ist.

Kann mir jemand erklären, warum die Statements trotz beendetem Abruf in
Code:
mon$statements
bleiben und vielleicht hat sogar jemand eine Idee, wie ich das ändern kann?

Danke für Tipps und Hilfe.

Gruß
Markus
  Mit Zitat antworten Zitat