4D v16.3Get database measures |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v16.3
Get database measures
Get database measures
Die Funktion Get database measures gibt detaillierte Informationen über Ereignisse der 4D Datenbank Engine zurück. Dies umfasst Lese- und Schreibzugriffe auf die Festplatte oder den Memory Cache, sowie die Verwendung von Indizes, Suchen und Sortieren in der Datenbank. Get database measures gibt ein einzelnes Objekt mit allen relevanten Messwerten zurück. Im Parameter Optionen können Sie die gewünschten Informationen genauer definieren. Das zurückgegebene Objekt enthält eine einzelne Eigenschaft mit Namen "DB" mit folgender Grundstruktur: { Dieses Objekt enthält bis zu acht elementare Eigenschaften mit Messwerten ("diskReadBytes", "cacheReadBytes", "cacheMissBytes", "diskWriteBytes", "diskReadCount", "cacheReadCount", "cacheMissCount", "diskWriteCount") gültig für die gesamte Datenbank, sowie zusätzlich eine weitere Unterteilung in "dataSegment1", "indexSegment", "tables", "indexes". Diese Eigenschaften haben wiederum selbst die elementaren Eigenschaften, jeweils gültig für die entsprechende Untergruppe. Diese fein abgestimmte Unterteilung erlaubt die Analyse der Datenzugriffe je nach Bedarf vom Gesamtsystem bis hin zu Zugriffen auf einzelne Tabellen oder Indizes. Hinweis: Eine Eigenschaft erscheint nur im Objekt, wenn sie Inhalt enthält. Eine Eigenschaft ohne Inhalt wird nicht in das Objekt aufgenommen. Wurde die Anwendung z.B. im Nur-Lesen Modus geöffnet und keine Indizes verwendet, enthält das zurückgegebene Objekt nicht die Messwerte "diskWriteBytes", "diskWriteCount", "indexSegment" und "indexes". Elementare Eigenschaften gibt es auf verschiedenen Ebenen im Objekt DB. Sie enthalten dieselbe Informationsart, aber für unterschiedliche Datenbankobjekte. Hier die Beschreibung der einzelnen Eigenschaften:
Alle acht elementaren Eigenschaften enthalten dieselbe Objektunterstruktur. Hier ein Beispiel: "diskReadBytes": { "value": 33486473620, "history": [ // optional {"value": 52564,"time": -1665}, {"value": 54202,"time": -1649}, … ] }
Die Eigenschaften "dataSegment1" und "indexSegment" enthalten bis zu vier der elementaren Eigenschaften (sofern verfügbar): "dataSegment1": { Diese Eigenschaften enthalten dieselbe Information wie die elementaren Eigenschaften, jedoch aufgeschlüsselt nach Datei der Datenbank:
Ihr Objekt könnte z.B. folgendermaßen aussehen: { "DB": { "diskReadBytes": { "value": 718260 }, "diskReadCount": { "value": 229 }, "dataSegment1": { "diskReadBytes": { "value": 679092 }, "diskReadCount": { "value": 212 } }, "indexSegment": { "diskReadBytes": { "value": 39168 }, "diskReadCount": { "value": 17 } } Die Werte werden so berechnet: diskReadBytes.value = dataSegment1.diskReadBytes.value + indexSegment.diskReadBytes.value Die Eigenschaft "tables" enthält alle Tabellen, auf die seit Öffnen der Datenbank im Lese- oder Schreibmodus zugegriffen wurde. Der Name der Eigenschaft leitet sich vom jeweiligen Tabellennamen ab, zum Beispiel: "tables": { "Employees": {…) "Companies": {…) } Jedes Objekt "table" enthält 10 Eigenschaften:
Je nach Such- oder Sortierläufen in der Tabelle können zusätzliche Eigenschaften "fields" und "queries" vorhanden sein:
Dies ist das umfangreichste Objekt. Alle Tabellen, auf die über einen oder mehrere Indizes zugegriffen wurde, werden als Eigenschaften gespeichert, die verwendeten Indizes darin wieder als Eigenschaften aufgeführt. Volltextindexes erscheinen separat und an ihren Namen wird "(Keyword)" angehängt. Schließlich erscheint jede Eigenschaft Indexname jeweils wieder mit den acht elementaren Eigenschaften und, je nach Index-Verwendung seit Starten der Datenbank, mit bis zu vier Unterobjekten. Jedes dieser Unterobjekte existiert nur, wenn die dazugehörige Operation seit Starten der Datenbank an irgendeinem Punkt ausgeführt wurde. Beispiel: Seit dem Starten der Datenbank wurden mehrere Indizes des Feldes [Employees]EmpLastName angefordert. Außerdem wurden in der Tabelle [Companies] 2 Datensätze erstellt und 16 gelöscht. Diese Tabelle hat das indizierte Feld "name". Sie wurde über dieses Feld auch durchsucht und sortiert. Als Ergebnis ergibt sich folgendes: "indexes": { "Employees": { "EmpLastName": { "diskReadBytes": {…}, "cacheReadBytes": {…}, "cacheMissBytes": {…}, "diskWriteBytes": {…}, "diskReadCount": {…}, "cacheReadCount": {…}, "cacheMissCount": {…}, "diskWriteCount": {…} } "EmpLastName (Keyword)": {...}, "index3Name": {…}, "index4Name": {…}, … } "Companies": { "Name": (...) "queryCount": { "value": 41 }, "sortCount": { "value": 3 }, "insertKeyCount": { "value": 2 }, "deleteKeyCount": { "value": 16 } table3Name: {…} } Mit dem Parameter Optionen können Sie die zurückgegebene aktuelle Information anpassen. In Optionen übergeben Sie ein Objekt mit bis zu drei Eigenschaften: "withHistory", "historyLength" und "path".
(*) Wie oben beschrieben, wird der Verlauf nicht sekundenweise gespeichert, sondern nur nach relevanten Werten. Passiert ein paar Sekunden lang nichts, wird nichts gespeichert und im internen Verlauf des Array entsteht eine zeitliche Lücke. "time" kann z.B. -2, -4, -5, -10, -15, -30 mit den Werten 200, 300, 250, 400, 500,150 enthalten. Hat die Eigenschaft "historyLength" den Wert 600 (10 Minuten), enthält das zurückgegebene Array 0, -1, -2, -3 … -599 für Zeit, aber nur die Werte von -2, -4, -5, -10, -15, -30 werden gefüllt. Alle anderen Werte erhalten den Wert 0 (Null). Wie bereits beschrieben, ist die Begrenzung des internen Array die Größe (200) und nicht die Zeit. Folglich kann bei geringer Aktivität einer bestimmten Eigenschaft die älteste Zeit länger zurückliegen, z.B. -3600 für eine ganze Stunde. Das Array kann auch weniger als 200 Werte enthalten, wenn die Datenbank gerade gestartet wurde. Liegt dann die interne Zeitspanne der Chronik unter der angeforderten ODER erscheinen alle relevanten Werte bereits im zurückgegebenen Array, lautet der zurückgegebene Wert -1. Beispiel: Die Datenbank wurde vor 20 Sekunden gestartet, die Chronik der Anfrage ist 60 Sekunden. Die zurückgegebenen Werte zwischen 0 und -20 werden mit Werten oder Nullen gefüllt, die anderen werden auf -1 gesetzt. Wird ein Wert "-1" zurückgegeben, bedeutet dies entweder, dass die Anfragezeit zu alt ist oder der Wert nicht mehr in der Chronik liegt, z.B. weil der 200. Eintrag erreicht ist bzw. ältere Werte entfernt wurden. Hinweis: Das Filtern über "historyLength" verlangsamt deutlich die Abarbeitung des Befehls. Zur statistischen Auswertung belasteter Server ist es sinnvoller, das gesamte Objekt ohne Angabe von "historyLength" abzufragen und das Ergebnis offline auszuwerten. Get database measures gibt ein gültiges Objekt mit relevanten Werten nur in folgendem Kontext zurück:
Bei Aufruf über ein remote 4D bleibt das Objekt leer. Im zurückgegebenen Objekt die Chronik anzeigen: C_OBJECT($param) Nur die globale Anzahl der im Cache gelesenen Bytes anfordern ("cacheReadBytes"): C_OBJECT($oStats) Das zurückgegebene Objekt könnte folgendermaßen aussehen: { "DB": { "cacheReadBytes": { "value": 9516637 } } } Die Meßwerte für im Cache gelesene Bytes der letzten zwei Minuten anfordern: C_OBJECT($oParams)
|
EIGENSCHAFTEN
Produkt: 4D GESCHICHTE
Erstellt: 4D v14 R3 ARTIKELVERWENDUNG
4D Programmiersprache ( 4D v16) |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||