RS DB Analyzer

UPDATED: 29.03.2013
Version 2.7, Änderungen siehe Changelog im Download

Ist meine IPS-Datenbank übergewichtig?

….wird sich so mancher fragen: das DB-File ist riesengroß, mittlerweile 1,3GB (nach 2 Jahren Intensivst-Logging by Raketenschnecke). Warum ist das so? was steckt da alles drin? Tut das not?….

Fragen über Fragen. Doch nun kommt Licht ins Dunkel: mit dem RS DB Analyzer. Braucht man den? Nein, nicht zwingend. Kann aber hilfreich sein.

Beispiel: ich hab zum Thema Logging-Strategie schon geschrieben, dass ich bestimmte Daten zwar logge, aber nur für einen bestimmten Zeitraum. Als ich den Analyzer das erste Mal laufen ließ fand ich gleich auf den ersten Blick 6 Variablen, die jeweils um die 500.000 Datensätze auf der Uhr hatten, aber nur etwa 50.000 hätten haben dürfen. Sofort überprüft: siehe da: die nächtliche Datenlöschung funktionierte nicht. Daten gelöscht, schon waren es 2,8 Mio Datensätze weniger. (Nachtrag, nach einer Woche Nutzung: inwzischen ist die DB durch weitere Pflege der Datenvorhaltung um 4,6 Mio Datensätze abgespeckt (über 30%)).

Das ist in etwa das Volumen, was sich in 6 Monaten ansammelt. Man sieht also: Transparenz ist anstrengend, kann aber helfen ;-)

Und das Obercoole dabei: ab jetzt muss ich mich nicht mehr selbst um das zyklische Löschen nicht mehr benötigter Daten kümmern, das erledigt jetzt der DB-Analyzer für mich. Das kann der ganz alleine! Und das fürht mittlerweile dazu, dass mein täglicher Datenzuwachs von ca 80.000 Datensätzen auf ca 10.000 Datensätze gesunken ist. Das Backup hat sich auch schon bedankt.

Update nach 2 Monaten Betrieb: das tägliche DB-Wachstum hat sich auf sagenhafte 22% reduziert (siehe Bild rechts). Das DB-Wachstum kann man auch täglich mitverfolgen: RS.SYS-Health (Chart ganz unten)

Features (Kurzübersicht)

  • täglicher Lauf der Projektscripte mit DB-Datenlöschung und Logging
  • manuelle oder automatisierte Abarbeitung von Reaggregations-Queues innerhalb beliebiger, frei definierbarer Zeitfenster
  • flexible Datenvisualisierung: Übersichtstabelle aller geloggten Variablen (DB-Analyzer), Variablen-Details (Variablen-Steckbrief), Rohdaten-Visualisierung (Variablen-Databrowser),  Multisort-Funktionen, diverse Statistik-Informationen zum Datenbestand, -Wachstum, -Menge etc.
  • dynamisches Datenmanagement: tägliches Löschen von nicht mehr benötigten Logging-Daten, frei konfigurierbar
  • diverse Konfigurationsmöglichkeiten durch den User (Anzahl Tabellenspalten, Spaltenreihenfolge, Vorsortierung)
  • Online-Toolhilfe
  • Record-Analyzer untersucht geloggte Zähler-Variablen auf Datenfehler und bereinigt diese auf Wunsch
  • die Sparkline-Darstellung im DB-Analyzer wird vom FireFox nicht vollständig unterstützt

Features (Details)

Modul DB-Analyzer

als Einstieg (via Webfrontend) wird man gleich von einer  riesen Daten-Tapete erschlagen – zumindest wenn man viele Variablen auf „Logging“  gestellt hat. aber so dramatisch ist das gar nicht – und wenn doch: via User-Config können die Spalten ja wieder ausgeblendet werden ;-)

Zweck des Analyzers ist, einen Komplett-Übersicht über den Datenbestand sowie Datenzu- Abflüsse zu bekommen, über verwaiste Variablen, geloggte Variablen ohne Daten sowie Variablen-Datensätze von deaktivierten Variablen informiert zu werden. Unterstützt wird dies durch die Multisort-Funktion der Datentabelle sowie diverse Statistik-Informationen. Vo hier aus kommt man dann – wenn sich die Verwirrung gelichtet hat – zu weiteren Detail-Views wie Variablen-Steckbrief, Variablen-Databrowser, Statistik-Tooltips und Online-Hilfe.

Variablen-Steckbrief/dyn. Datenmanagement:

Ab V2.0 des DB-Analyzers ist auch ein Datenmanagement möglich:

pflegt man den Vorhaltezeitraum einer Variable (via Variablen-Steckbrief), so werden beim nächtlichen Lauf des Projekts alle Daten der Variable gelöscht, die ausserhalb des Vorhaltezeitraums liegen. Damit kann man das Wachstum des DB-Files dramatisch ausbremsen, sogar zum Stillstand bringen. Performance-Vorteile bringt das nicht, aber in Sachen Backup ist das ein riesen Vorteil, kleine Files handeln zu müssen.

Über den Variablen-Steckbrief lässt sich das Logging für jede Variable abschalten, eine Option zur kompletten Datenlöschung wird ebenfalls angeboten.

Modul Variablen-Databrowser

Über klick auf die „Records“-Zelle im DB-Analyzer wird der Variablen-Databrowser aufgerufen. Hier werden die Rohdaten der Variable der verg. 24h (begrenzt auf max. 5000) abgerufen und ein einer Datentabelle aufbereitet. Die Rohdaten selbst werden 1:1 so dargestellt, wie sie aus der DB kommen. Damit man damit was anfangen kann, aber ich einige zusätzliche Informationen hinzugefügt:  wer hat schon die Unix-Timestamps auswendig gelernt und weiß sofort, welcher Zeitpunkt gemeint ist?! Ein „human Date“ (für Menschen lesbares Format: 23.12.2012, 06:77 Uhr) ist besser als 1356243420.

Auch diese Tabelle lässt sich beliebig sortieren, beherrscht die Multisort-Funktion – und über das Config-Script kann man die default-Zeilenanzahl dem lokalen Bildschirm anpassen. Natürlich lässt sich zusätzlich direkt im WFE Zeilenanzahl auf das bis zu 4fache des eingestellten Defaultwertes erhöhen.

Modul Aggregation-Manager

Den Aggregation-Manager gibt es in 2 Varianten: einen für den manuellen Modus, einen für den Automatischen Modus. Im automatischen Modus kann eine freie Auswahl an zu reaggregierenden Variablen definiert werden. Weiterhin kann man beliebige TimeSlots definieren, innerhalb derer die reaggregation ablaufen darf. Im automatischen Modus  arbeitet der Aggregations-Manager die Queue so ab, dass eine optimale Ausnutzung der definierten Zeitfenster gewährleistet ist.

Die Queue kann während des Reaggregations-Prozesses ergänzt, verkürzt oder gelöscht werden. Ebenso erhält man Infos über die voraussichtliche Dauer der Reaggregation (bei mir würde eine vollständige Reaggregation ca 60h (!) dauern) – so fällt eine Planung der ReAgg-Queue wesentlich leichter.

Die Abarbeitung der Queue lässt sich via Button im WFE  in den Pause-Modus versetzen, falls wichtige IPS-Aktivitäten anstehen. Anschließend kann die Abarbeitung fortgesetzt oder die Queue ganz gelöscht werden.

Modul  Record Analyzer

Der Record-Analyzer untersucht alle Datensätze von Zähler-Variablen auf Fehlerwerte. Diese Fehlerwerte können via GUI analysiert und bereinigt werden (Cleaning). Anschließend sollten die betroffenen Variablen reaggregiert werden. Dazu erstellt der Record-Analyzer eine Reaggregations-Queue, die vom User via Aggregations-Manager zur Abarbeitung angestoßen werden kann. Sicherheitshalber schreibt der Record-Analyzer ein Log ins Projektverzeichnis („\RSDB_Analyzer\RecordAnalyzer\Log\“), welches alle gelöschten Daten enthält.

Achtung: die Fehlerausgabe ist auf max. 500 Fehler begrenztda es sonst zu Memory-Problemen in IPS kommt. Hat eine Variable mehr als 500 Fehler, muss der Cleaning-Prozess entsprechend oft angestoßen werden.

Detailierte Informationen und Hintergrundwissen gibts hier: Link

Modul  Record Reducer

Mit der Version 2.7 des DB-Analyzers hat ein neues Modul sein Zuhause gefunden: der Record Reducer.

Mit seiner Hilfe kann man alte IPS-Datenbestände reduzieren, und zwar drastisch. Es wird nur ein Datensatz pro Stunde stehen gelassen, der Rest wird gelöscht. Zeitraum und Variablen dieser Reduktion sind durch den User frei wählbar. Ist der Reducer mit seinem Job fertig, übergibt er eine Liste von Variablen zur Reaggregation an den Aggregation-Manager. Anschließend kann man bequem die Reaggreation anstoßen und sich wieder hinlegen – den Rest macht die Software.

Detail-Infos zum Record Reducer hier: klick

Statistik-Daten (Sparklines + KPI’s)

ab dem Zeitpunkt der Installation der V2.0 des RS DB Analyzers werden auch die Datenmengen pro Variable aufgezeichnet. Da diese Funktionalität nicht auf IP-Symcon Kernfunktionen aufsetzt, werden diese Daten ausserhalb der Db gespeichert (in csv-Files). Das hat auch zur Folge,  dass die Sparklines logischerweise erst nach einigen Tagen/Monaten brauchbare Anzeigen produzieren.  Und mit denen hab ich wirklich nicht gegeizt: Pro Variable gibt es 3 Sparklines (übers Projekt verteilt), + eine Handvoll weiterer dieser kleinen Kerlchen. In meinem lokalen Projekt sind es in Summe knapp 700 Stück. I love it!

Installation:

im Download befindet sich ein mit dem Project Exporter erstelltes Install-File. Also ist das Ganze Plug and Play:

  • Script aus dem Download ins IPS importieren
  • im Installscript die ID des Webfront-Konfigurators angeben
  • Install-Script starten
  • im Webfront-Konfigurator die den neu installierten Projekt-Teilbaum „CpyDB_Visu“ an die gewünschte Stelle im WFE-Objektbaum ziehen, speichern
  • Projekt „RS DB Analyzer“ ist nun vollständig installiert und betriebsbereit
  • WFC-ID für Popup-Meldungen eintragen (sonst wird sofort eine Fehlermeldung generiert)!
  • zum Aktivieren des Projekts einmalig manuell das Script „User-Config“ im IPS-Objektbaum starten
 
  

Update

wichtig vorab: es gibt keinen Zwang, jeden Versionssprung mit zu machen.  Ein Update ist immer unabhängig von der bereits bestehenden Installation.Die Aktivierung des Projekts erfolgt durch einmaliges, manuelles Starten des Scripts „Config/User-Config“

Versionshistorie

  • Versions-Infos V2.5 hier
  • Versions-Infos V2.6 hier
  • Versions-Infos V2.7 hier

Nutzungsrechte:

  • das Script darf für private, nicht kommerzielle Zwecke frei verwendet werden
  • eine Weitergabe oder Änderung sowie auszugsweise Verwendung des Codes nur nach schriftl. Genehmigung des Autors
  • für evtl. entstehende Schäden durch die Verwendung dieses Scripts wird keinerlei Haftung übernommen 
  • falls Interesse an einer kommerziellen Nutzung besteht, wende Dich gern an MICH

IP-Symcon Foren-Diskussion:

RS DB Analyzer 

Danksagung

Und wieder einen riesen Dank an Werner (IP-Symcon Forum: wgreipl) fürs Vorabtesten, gleichermaßen kritische wie hilfreiche Fragen, Ideen und Tipps! Und Geduld war wohl auch vonnöten ;-)

Quellen:

für die Sortierfunktion habe ich das wunderbare JQuery Tablesorter 2.0-Script eingesetzt.

Die Tooltips werden von XBTooltips und den WalterZorn-Tooltips übernommen.

Eingebaut sind ab V2.1 die JQuery Sparklines von hier: klick 

FAQ RS DB Analyzer

wie erfahre ich, ob es ein Update gibt?

Alle Projekte auf Raketenschnecke.net sind ab 2013 mit einem Update-Info Modul ausgestattet. Ist eine neuere Version des Projekts verfügbar, wird eine Info über das WFE eingeblendet. Ausnahme: der Project Exporter hat keine WFE-Visualisierung, daher werden hier die Update-Informationen im Script-Meldungsfenster ausgegeben. Diese Info verschwindet nach einem erfolgreichen Update.

Versions- und Update-Infos werden immer über einen Blog-Artikel veröffentlicht, der mit der Projekt-Homepage verlinkt ist.

muss der DB-Analyzer wirklich jeden Tag laufen?

Der DB-Analyzer ist defaultmäßig so konfiguriert, dass er innerhalb der ersten 10 Minuten nach Mitternacht läuft. Hierbei werden nicht nur die Logging-Zeiträume der Variablen aufgeräumt (sofern in den variablen Vorhaltezeiträume definiert wurden), es werden auch Statistik-Daten erhoben, die ohne den täglichen Lauf nicht ermittelbar sind. Das sind im Wesentlichen die Zuwächse der Datenbestände pro Variable. 

Da auch der Datenzuwachs pro Tag ermittelt wird, ist es wichtig, dass der DB-Analyzer möglichst exakt zum selben Zeitpunkt läuft, da anderenfalls nicht korrekte Zuwachsraten pro Tag gemessen werden.

Lässt man den DB-Analyzer nun in unregelmäßigen/größeren Zeitabständen laufen,  ist eine Analyse der Datenbestände und Zuwächse kaum möglich bzw. wird es hier zu falschen Schlussfolgerungen kommen. Soweit man das in Kauf nehmen kann/will, kann der DB-Analyzer auch in unregelmäßigen/größeren Zeitabständen laufen (was aber ausdrücklich nicht empfohlen wird und auch nicht im Sinne des Projekts ist).

Wo finde ich einen Download?

Keine Angst, Du bist nicht blind! Die Downloads sind (seit 16.11.2014) nur registrierten Usern zugänglich ;-)

sehr lange Scriptlaufzeit des DB-Analyzers – was tun?

F: Bei mir läuft der DB-Analyzer sehr lange (Script „read DB“),  IPS ist während dieser Zeit wie blockiert, DeathThreads tauchen auf. Woran liegt das, was kann ich tun?

 

A: Die Abfrage der Datensatz-Informationen aus der IPS-DB ist ziemlich Ressourcenhungrig. Bei einer intakten DB sollte das aber dennoch kein Problem sein.
Bei mir dauert eine Abfrage (Script „read DB“) ziemlich stabil zwischen 10-12 Sekunden. Ich habe ca 240 geloggte Variablen, die DB ist genau 2 Jahre als und beinhaltet aktuell 9,7 Mio Datensätze. Der Server ist ein i5 mit SSD’s und 8GB RAM.
Es kommt bei mir (selten) mal vor, dass die Abfrage 60 Sekunden läuft. Der Grund ist mir nicht transparent. Aus diesem Grunde habe ich die Laufzeit bei mir sehr großzügig eingestellt, um hier nicht auf einen Fehler zu laufen.
In den Fällen, wo das Script wirklich eine Blockade des IPS und DeathThreads zur Folge hat (bisher sind mir 4 Fälle bekannt, 3 davon wurden gelöst, im 4. Fall ist mir der Status nicht bekannt), war das immer auf eine korrupte DB zurück zu führen. Es empfielt sich hier, einen DB-Scan bzw. einen Repair-Versuch (keine Reaggregation!) zu starten: Anleitung DB-Reparatur auf der IP-Symcon-Seite.

Hinweis: Das Prüfungsergebnis der Db durch die genannten Tools ist leider nicht verlässlich! Auch fehlerfrei gemeldete Datenbanken verursachten Fehler im Betrieb, welche erst nach einem  tatsächlichen Reparaturlauf beseitigt wurden.

DB wird auch nach Datenlöschung nicht kleiner – was läuft hier falsch?

F (aus IPS-Forendiskussion):

Wir haben hier ja schon oft diskutiert das dies in einer SQLite ja eigentlich Blödsinn ist, da die Daten nur als gelöscht markiert aber nicht physisch gelöscht werden. Die Filegröße bleibt gleich.
Ist das bei deiner Löschfunktion auch so, oder reorganisierst du die Datenbank hinterher ?
Macht es also Sinn für die Behaltezeiten einzupflegen, oder ist das nur Makulatur – in Bezug auf Filegröße ?

 

A: Also: Blödsinn ist das m.E. nicht. zwar wird das File nicht kleiner (was durch es reagggregieren übrigens auch nicht wird), dazu müsste man IPS runterfahren und manuell verdichten.

Der Vorteil ist schon gegeben, da der durch gelöschte Daten eingesparte File-Space anschließend mit neuen Datensätzen aufgefüllt wird. d.h. dein File wächst solange nicht, bis die vor dem Löschen erreichte Anzahl von Datensätzen wieder erreicht ist. Und hier spielt der DB-Analyzer einen richtigen Vorteil aus: durch das tägliche Löschen ereicht man, dass das File so klein wie möglich bleibt (und nicht in der Größe oszilliert, wenn man alle paar Monate man. löschen + verdichten würde).

sehr gut zu sehen ist das hier:  RS.SYS-Health (Chart ganz unten)

vielleicht noch ein Nachtrag, um den Vorteil des zyklischen Löschens zu verdeutlichen:
würde man alle Variablen mit einer Vorhaltezeit definieren, dann täglich alle Daten (die nicht in diesem Zeitraum liegen) löschen, würde das DB-File nicht mehr wachsen. Seine Größe bliebe konstant. Natürlich nur unter der -rein theoretischen- Annahme, dass das tägliche Datensatz-Aufkommen absolut konstant ist.

 


Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

css.php