Wie ermittel ich aktuelle Datenbankaktivität?

OS: Windows
DB: Sybase iAnywhere

Ich arbeite mit einem (selbstgeschriebenen) Programm, welches über ODBC auf sehr großen Datenbanken zugreift.
(Entwicklungsumgebung: Oracle Hyperion Interactive Reporting)
Manche Operationen dauern aufgrund der Datenmenge sehr lange.
Bei anderen Operationen stürzt die Datenbank ab, ohne eine Rückmeldung an das Programm zu geben.

Oft weiß icht nicht, ob die eine Datenbankabfrage noch läuft, oder die Datenbank bereits den Dienst quittiert hat.

Gibt es eine Möglichkeit den Arbeitszustand der Datenbank oder einer ODBC-Schnittstelle in regelmäßigen Periodika (z.B. alle 10 Sekunden) zu ermitteln und zu visualisieren ?

Vielen Dank für den Hirnschmalz

Hallo conan2011,

auch wenn ich den Begriff „DB abgestürzt“ etwas kritisch gegenüber stehe (ehe Session Timeout) und auch eher ein Problem in der Datenbank Performance sehe (gegebenfalls schonmal über Aggregationstabellen nachgedacht falls Indizes nicht helfen?): Eine Aktivität einer Datenbank kann man nur mit einer weiteren Session überprüfen. Entweder mit einer sehr kleinen, performanten Abfrage (aktuelle Uhrzeit) oder falls bei Deiner Datenbank möglich Systemparamter, am besten die der anderen Abfrage.

MfG Georg V.

Vielen Dank für die zeitnahe Antwort.
Ich bin nicht so bewandet wie du, wenn es um Datenbanken geht, deshalb muss ich noch einmal nachfragen.

Gehen wir wieder von folgender Situation aus:
Meine Datenbank ist mit einer umfangreichen Abfrage beschäftigt, und ich möchte herausfinden, ob sie noch arbeitet, oder bereits ein Session Timeout geschah.
Dazu starte ich eine weitere (möglichst) kleine Abfrage.
Wenn diese ausgeführt wird, weiß ich, dass die Datenbank noch läuft.

Ich hoffe bis hierhin habe ich alles richtig verstanden.

Meine Fragen:
Wenn die Datenbank noch mit der großen Abfrage beschäftigt ist, wird sie die kleine überhaupt zwischendurch bearbeiten? Oder kommt die hinten dran?
Gibt es darüberhinaus auch eine Möglichkeit herauszufinden, ob die Datenbank noch mit der großen Abfrage beschäftigt ist?

Ich weiß das erfordert Hineindenken, ich bin jeder Anwort und Inspiration sehr dankbar !

Viele Grüße

Hallo conan2011,

ich kenne das Sybase ianywhere nicht. Jedoch ist jede (vernünftige) Datenbank dafür ausgelegt mehr als eine Abfrage gleichzeitig zu bedienen.

Gehen wir wieder von folgender Situation aus:
Meine Datenbank ist mit einer umfangreichen Abfrage
beschäftigt, und ich möchte herausfinden, ob sie noch
arbeitet, oder bereits ein Session Timeout geschah.
Dazu starte ich eine weitere (möglichst) kleine Abfrage.
Wenn diese ausgeführt wird, weiß ich, dass die Datenbank noch
läuft.

Deshalb wird dir dies nur dann eine Erkenntnis bringen, wenn die Datenbank abgestürzt ist. Wenn nur die erste Session wegen Timeout heraus geflogen ist, wird Dir die Anfrage sofort beantwortet.

Meine Fragen:
Wenn die Datenbank noch mit der großen Abfrage beschäftigt
ist, wird sie die kleine überhaupt zwischendurch bearbeiten?
Oder kommt die hinten dran?

Gute Datenbanken habe zwischen Ihren einzelnen Programmteilen, die die Datenbankabfragen beantworten, die gleichen Mechanismen laufen wie z.B. das Betriebssystem Unix. Danach bekommt jeder von Zeit zur Zeit sein Häppchen Resourcen zugeteilt. Natürlich kann dabei eine Abfrage durch eine andere behindert werden, z.B. wenn Abfrage 1 ein Update und Abfrage 2 ein Select auf die gleiche Tabelle macht (für die Experten: je nach Lockingmodell des DBMS natürlich unterschiedlich schnell)

Gibt es darüberhinaus auch eine Möglichkeit herauszufinden, ob
die Datenbank noch mit der großen Abfrage beschäftigt ist?

Das ist DB-System- und Rechtespezifisch. Dazu sollte man sich in die Systemliteratur der Datenbank vertiefen. Manchmal kann sich relativ schnell einen Serverüberblick beschaffen (bei MySQL mit show variables, ianywhere ??)

MfG Georg V.