Ermitteln der Datengröße vom Ergebnis eines Select-Befehls

hkProg

Benutzer
Beiträge
21
Hallo zusammen,
ich habe ein kleines Problem mit abgerufenen Daten durch ein Programm.
d.h. ich ermittle mit einem Programm, welches auf einem Terminalserver läuft zusammengefasste Daten
für eine Fertigungsanlage, und gebe diese Daten grafisch aus. Teilweise wird die Datenmenge alle 15 Sekunden
abgerufen.
Jetzt wurde ich angesprochen, das dieses Terminal ca. 70 GB Netzwerktraffic in einem gewissen Zeitrahmen
verursacht, und dass die zu viel ist.
Jetzt wollte ich feststellen, welche Datenmenge diese Abfrage bzw. generell Abfragen vom Server abrufen und übers
Netzt transferieren. Die Abfrage ist eine Zusammenfassung von Daten, woraus sich max. 7 x 24 Datensätze ergeben,
die 6 Spalten beinhalten. Theoretisch könnte man die Größe der 6 Spalten mit der Anzahl der möglichen Datensätze
multiplizieren und hätte einen Anhalt. Jedoch weiß ich nicht, ob dies dem tatsächlichen Datenvolumen entspricht, welches
vom Server übers Netz übertragen wird.
Leider konnte ich im Moment nichts finden, wo ich die Größe der übertragenen Datenmenge in meinem Reader-Objekt
ermitteln kann. Ich benutze sinngemäß den NET Connector und greife ungebunden auf die Daten zu.
Ich bedanke mich vorab schon einmal über Tipps und Lösungsansätze!
mfg
HkProg
 
Werbung:
Neben den Daten gibt es ja noch einen gewissen Protokoll Overhead.
Unter Umständen verringert sich aber durch komprimierung die Datenmenge.

Hier hilft nur Messen.

Wieso sind 70 GB zu viel? In welchem zeitraum fallen die 70 GB an?
Gibt es in der Zeit noch andere Datentransfers? Z.b. Patches?
 
Langsam fängt man überall an, Strom zu sparen.

Grob überschlagen könnte man 70 GB in 3 Tagen hinbekommen, wenn jede Sekunde ein solches Paket rausgeht.
Die Frage ist, wie die drauf kommen und warum es Dein Tool sein muss. Selbst wenn Du Netzwerktransfer misst, weißt Du noch nicht, was Du davon zu verantworten hast.

Ich denke auch, wie schon @akretschmer schrieb dass es keinen Sinn macht, es am reinen SQL / Dateninhalt festzumachen.

Ich benutze sinngemäß den NET Connector und greife ungebunden auf die Daten zu.
Ich kann mir allerdings auch vorstellen, dass eine sagen wir ungeschickte Nutzung von Dot Net Komponenten(!) ein solches Volumen in sehr viel kürzerer Zeit zusammenbringt, ggf. mit wenigen Abfragen. Soetwas habe ich in der Realität schon gehabt. Es ging eigentlich um DB Tuning. Am Ende hat sich rausgestellt, dass der Client ständig die halbe DB abfragt- ohne dass es dem Programmierer bewusst war.
 
Es ging eigentlich um DB Tuning. Am Ende hat sich rausgestellt, dass der Client ständig die halbe DB abfragt- ohne dass es dem Programmierer bewusst war.
Auch nur das Nötige abzufragen ist Tuning :).

In diesem Fall fragt @hkProg immer 7*6*24 ab, wobei sich wahrscheinlich nur die letzten, aktuellen Daten ändern. Kannst Du die Daten der vorher gehenden Tage nicht in Deinem Programm speichern und entsprechend weniger abfragen?
 
Zur Info:
Wir lesen die Daten verschiedener Fertigungsanlagen, welche in CSV-Dateien gespeichert sind in gewissen zeitlichen Abständen ein,
und schreiben diese zusammengefasst in die Mysql-Datenbank. d.h. es erfolgen Einträge in die Tabellen der Anlage mit Fertigungsdatum,
Stunde, Stückzahl, Fehlerzahl. Es können also für eine Stunde auch mehrere Einträge vorhanden sein, da im Moment alle 15 Minuten die
Daten abgerufen werden. Diese Routinen machen keine Probleme.

In den Hallen gibt es Terminals, welche die Ausbringungen von 1 Anlage anzeigen. Die machen keine Probleme, da hier nur alle 5 Minuten die Daten aktualisiert werden. Es gibt aber auch Terminals, welche in einer Wechselanzeige alle 10 Sekunden eine andere Anlage anzeigen.
Abgerufen werden hier die Daten einer bestimmten Woche, d.h. eine Gruppierung nach Datum und Stunde, wo Menge und Fehler für jede
Stunde summiert werden. Daher können bei einer Woche die Anzahl der Zeilen max. 7 Tage mit jeweils 24 Stunden (0-23) betragen.
Da die Daten normal auf dem Server ausgewertet werden, müssten ja nur diese Zeilen übertragen werden. Wenn ich eine Zeile betrachte,
dann sind die Felder von der Größe her nur Zahlen, und ergeben theoretisch nicht mehr als 30 Byte. Und wenn ich dies mit max. 168 Zeilen
multipliziere ergibt das von der Datenmenge her ca. 5 KB.
Ich erlaube mir dabei den Luxus auch den kompletten Tageswert zu ermitteln, was nochmals 7 Zeilen mit den selben Ergebnisspalten sind.
(außer Stunden). Und zusätzlich ermittle ich auch den Wochenwert, was nochmals eine Zeile ist (ohne Stunde und Tag). Das wären noch einmal
ca. 1 KB an Ergebnisdaten.
Alle 10 Sekunden eine andere Anlage würde bedeuten, das an einem Tag 8640 Aufrufe erfolgen, bei denen 6 KB an Daten übertragen werden.
Das wären ca. 50 MB am Tag. Mir ist bewusst, dass dies erst mal theoretischer Natur ist. Jedoch macht dieses Terminal nichts anderes als die Daten anzuzeigen, und das 24 Stunden am Tag. Und bei einem gemessenen Traffic von 5 GB je Tag frage ich mich, woher der kommt?

Hier noch einmal herzlichen Dank für eure Mühen!
 
Wie misst du den Traffic bisher?

Ich hatte vor vielen Jahren Ntop für solche Traffic Analysen genutzt: ntopng
Hier wird dir schon aufbereitet, welche Protokolle und Ziele im Netzwerktraffic enthalten sind.
 
Alle 10 Sekunden eine andere Anlage würde bedeuten, das an einem Tag 8640 Aufrufe erfolgen, bei denen 6 KB an Daten übertragen werden.
Das wären ca. 50 MB am Tag.

Dazu kommt aber Protokoll-Overhead. Wird die Verbindung jedesmal neu aufgebaut? Dann kommt AUTH-Krams dazu. NET-Connector? Der saugt sich da vielleicht zuerst einmal Informationen über alle möglichen Tabellen zusammen. Und so weiter.
 
Warum prüfst Du nicht Deinerseits mit NTOP wieviel da transportiert wird. Die Berechnung von SQL Datentransfer ist nicht hinreichend! Und falls Dot Net Komponenten im Spiel sind, können die ein Vielfaches des oben berechneten Volumens verbraten.
 
Werbung:
Zurück
Oben