AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Firebird Statements "idle" trotz beendeter Abfrage

Firebird Statements "idle" trotz beendeter Abfrage

Ein Thema von ZOD · begonnen am 10. Mai 2023 · letzter Beitrag vom 11. Mai 2023
 
ZOD

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

Firebird Statements "idle" trotz beendeter Abfrage

  Alt 10. Mai 2023, 14: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
 

 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 09:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz