Im Normalfall laufen die Anwendungen bei den Anwendern ohne größere Störungen. Dennoch können Situation auftreten, die dazu führen, dass Verarbeitungen in der Anwendung länger als gewöhnlich benötigen oder die Datenbank-Benutzer häufiger eine Meldung mit dem Hinweis „Wartezustand“ erhalten.
Um die möglichen Ursachen herauszufinden ist die Systemumgebung näher zu beleuchten. Für die Analyse eines Systems gibt es entsprechende Monitoring-Werkzeuge, wie zum Beispiel der Performance Monitor unter Windows.
Auch CONZEPT 16 bietet die Möglichkeit, etwaige Engpässe im System- oder Applikationsumfeld erkennen zu können. Dazu stellt der CONZEPT 16-Server eine erweiterte Protokollierungsfunktion zur Verfügung.
Bei den erweiterten Protokolleinträgen handelt es sich um sogenannte Debug-Einträge, die bei Bedarf aktiviert werden können. Dazu wird der Parameter DebugOptions in der Datenraumtabelle (c16_serv.ars) des CONZEPT 16-Servers auf einen bestimmten Wert gesetzt.
Beispiel:
[AreaTable]
<Password=’eef8d60d4c611adf4b4691b4f27785abd334bde8e11dc221ae07′>
<ProtocolCRC=0>
<DebugOptions=120>
Der Wert des Parameters entspricht der Addition der gewünschten Debug-Einträge. Bei den Werten handelt es sich um Hexadezimalzahlen. Das Setzen der DebugOptions ist derzeit nur über ein direktes Editieren der Datenraumtabelle möglich. Es ist zu beachten, dass vor dem Ändern dieser Datei der CONZEPT 16-Server gestoppt sein muss.
Über die DebugOptions lassen sich nachfolgende „Ereignisse“ in der Protokolldatei festhalten:
0x01 – Wartezustände eines Benutzers, die länger als 2 Sekunden betragen
Bei einer Anfrage ist ein Wartezustand von mehr als 2 Sekunden Dauer eingetreten. Es wird die ID des Benutzer ausgegeben, der das Datenbank-Segment gesperrt hält.
Zusätzlich wird die Nummer des Baums angezeigt, zu dem das gesperrte Segment gehört. Die Einträge dienen zur Überprüfung der eigenen Programmierung im Bereich Transaktionen.
Eintrag in der Protokolldatei:
User wait on ID … tree … seg …
0x02 – Anfragen, die länger als 3 Sekunden benötigen
Eine Anfrage benötigt länger als drei Sekunden zur Verarbeitung. Es wird der sogenannte Operationscode und die Dauer der Verarbeitung in Sekunden ausgegeben.
Der Operationscode repräsentiert die zu Grunde liegende Datenbankoperation. Am Ende des Blog-Eintrags steht der gesamte Artikel, inklusive einer Aufstellung der wichtigsten Codes, zum Download zur Verfügung.
Eintrag in der Protokolldatei:
User long request OP … time …
0x10 – Auftreten von Deadlocks
Das Auftreten von Verklemmungen (Deadlocks) wird festgehalten. Der Operationscode und der Baum, zu dem das gesperrte Segment gehört, wird in im Protokoll ausgegeben.
Eintrag in der Protokolldatei:
User deadlock detected [OP … Tree … User …]
0x20 – Ausführen einer Prozedur auf dem CONZEPT 16-Server
Start- und Endezeitpunkt sowie Name der Prozedur wird protokolliert.
Eintrag in der Protokolldatei:
Procedure start/end […]
0x100 – Größe des Datenvolumens und Dauer des Updates
Abgeschlossene Transaktionen werden alle 30 Sekunden in die Datenbank übertragen. Das Volumen und die Dauer, die für das Schreiben des Updates benötigt wurde, wird ausgegeben. Die Dauer lässt Rückschlüsse auf die I/O-Leistung des Systems zu.
Eintrag in der Protokolldatei:
Database update time … seconds … MB
0x200 – Selektionen auf dem Server
Beim Ausführen einer Selektion auf dem Server wird der Startzeitpunkt und das Ende festgehalten. Zusätzlich wird der Name der Selektion, die dazugehörige Tabelle und das Resultat der Funktion SelRun()
protokolliert.
Eintrag in der Protokolldatei:
Selection start/end […/… result …]
Die Einträge erfolgen in der Protokolldatei der Datenbank und werden mit dem Debug-Symbol gekennzeichnet.
2 Antworten
@Th.Eichele
Alle Optionen werden hexadezimal angegeben und zur Kombination auch hexadezimal addiert. Der Datenbankserver erwartet in der Datenraumtabelle ebenfalls einen hexadezimalen Wert.
Ist der Eintrag in DebugOptions ebenfalls als Hex-Wert einzutragen oder in Dezimal umzurechnen ?
(und wenn Dezimal, was bedeuten im Beispiel 120=0x78 die Werte 0x08 und 0x40 ?)