Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hi :)

Hab da mal eine vielleicht etwas ungewöhnliche Frage.

Und zwawr habe ich eine MySQL-DB und möchte jetzt errechnen, wieviel "Bandbreite" eine SQL-Abfrage verbraucht bzw. wie viel ein INSERT oder SELECT verbraucht, wenn X zeilen als result zurückgegeben werden.

Mit PhpMyAdmin kann ich zwar die DB-statistiken auswerten, aber da sich auf der DB, die im livebetrieb ist, natürlich ständig dinge ändern, komm ich da nicht weiter.

Gibt es nicht eine Art online-errechner? Oder gibt es formeln, nach denen man das berechnen kann?

Es geht bei den Abfragen hier nicht um riesige mengen na daten, sondern eher um bytes/kilobit.

Jemand eine Idee? ._.

Danke schonmal für jede Antwort ^^

Geschrieben (bearbeitet)

Bitte definiere Bandbreite.

Wenn Du die Laufzeit der Abfrage meinst, ist es ganz simpel.

Nehme die Startzeit (z.B. microtime) und errechne dann aus der Start- & Endzeit die Laufzeit ;)

Bearbeitet von uenetz
Geschrieben

Hi,

nein, denn dazu sind die Statistiken da, die aber, je nach Einstellungen, natürlich nicht 100% aktuell bzw. genau sind. D.h. du müsstest ja im Vorfeld wissen, wieviele Zeilen zurückgeliefert werden, was du aber natürlich nicht wissen kannst, bevor du die Abfrage ausgeführt hast.

Geschrieben

Ich meine nicht die Laufzeit ;)

Mit Bandbreite meine ich einfach die Netzwerklast, auch wenn diese gering ist.

@carstenj:

Ich kann wissen, was im vorfeld abgefragt und auch was zurückgegeben wird.

Ich möchte keine automatisierung:

Um ein Beispiel zu bringen... Ich habe folgende Tabelle:


	 1	id	int(11)

	 2	timestamp	timestamp

	 3	ip	text

	 4	rechnername	text

	 5	prozessname	text

	 6	erledigt	int(11)

Dort füge ich als rechnername "PC-001-001" ein, als ip "192.168.1.1" und ale prozessname "c:\windowssystem32\ping.exe".

Diese eingeführen Daten werden natürlich per MySQL dort eingefügt und ich möchte nun wissen, wie viel Bandbreite dieser Query verursacht.

Es wird ja dann der übliche mysql-query übers netzwerk geschickt, aber es ist ja noch overhead dabei (user-daten wie z.b. login und evtl noch andere daten).

Kann man sich das irgendwie berechnen?

Geschrieben
Sofern Du das verwendete Protokoll genau kennst ja. Ansonsten nein.

Kenn ich alles, jo. Und wie berechnet man die Größe jetzt? ;)

Das Problem ist, dass ich die Statistiken nicht wirklich benutzen kann, weil z.b. bytes_recieved bei ejder abfrage natürlich die daten der vorherigen bytes_revieced abfrage beinhaltet. Also sind dort fehler eingebaut, die man auch nicht wirklich gut rausrechnen kann. Habs eben versucht ;)

Daher... Gibts irgendwie eine formel wo man sagen kann:

- der query string ist so viele zeichen lang.

- diese datenbankfeld-typen habe ich

- diese daten kommen mit x vielen zeichen zurück

- Summe: xyz

Sowas wäre halt perfekt :/

Geschrieben

Hi,

diese daten kommen mit x vielen zeichen zurück

mal rein logisch: Angenommen du hast 100 Einträge. Das kriegst du aber nur heraus, wenn du ne Abfrage machst. Das kostet schonmal Zeit. Während der Abfrage kommen 5 Einträge dazu. D.h. das Ergebnis stimmt dann schon nicht mehr, weil es nicht mehr 100 Einträge, die dir als Rechengrundlage dienen, sind, sondern mittlerweile 105 Einträge.

Du kannst natürlich ungefähr ermitteln, was dich erwartet, aber auf das Byte genau geht das nicht.

Wofür brauchst du das denn? Evtl. gibt es andere Lösungen?

Geschrieben

@carstenj:

Also:

Ich habe einen Service programmiert, der auf vielen Rechnern unserer Firma laufen soll/wird.

Das sind z.b. 100 Rechner.

Dieser Dienst macht alle 15 minuten eine abfrage übers internet an einen mysql-server (der mysql-server ist auch von mir).

Auf diesem server ist eine tabelle mit festen werten.

Also z.b. hat diese tabelle momentan 155 Zeilen/einträge.

die struktur der tabelle sieht so aus:


ID = int(11)

name = text (im durchschnitt ca. 30 zeichen)

info = text (höchstens 5 zeichen)

Jetzt möchte ich also wissen, wie viel Traffic auf den Mysql-server zukommt, wenn 100 rechner diese abfrage machen (im worst-case machen die 100 rechner die abfrage auf die sekunde genau gleichzeitig. Realistisch ist das aber nicht) Da die daten, die abgefragt werden mir also bekannt sind, könnte ich diese ja berechnen. Also z.b.: 30 zeichen * 155 zeilen = 4650 zeichen 1 zeichen = 1 byte, also 4650 byte. 4650 byte / 1024 = 4,5 KB. die info-felder sind erstmal zu vernachlässigen. Dann kommt noch die ID dazu. Dann kommt noch die abfrage-query dazu, die diese ausgabe triggert. also z.b.
SELECT * 

FROM  `t_whitelist` ;

macht 39 zeichen = 39 byte.

Also 39 byte + 4650 byte = 4689 byte = 4,57 KB

das mal 100 rechner wären dann 457 KB.

Ich dachte halt, dass es da eine genauere rechnung/rechenart gibt.

Denn es könnte auch sein, dass dieser service auf 1.000 rechnern ausgeführt würde und da käme es schon eher die vermeidu8ng von rundungs-/ und schätzfehlern an ;)

Wenn es keine feste formel gibt, kansnt du mir vielleicht einfach schreiben, wie du es rechnen würdest? Ich hab da bestimmt dinge übersehen oder falsch berechnet ;)

LG XspYroX

Geschrieben
Gibt es einen vernünftigen Grund dafür, dass dieser Server im Internet hängt, und nicht in eurem Firmen-LAN?

Und falls ja, warum kein lokaler Cache?

Natürlich gibt es diesen guten Grund ;)

Wir haben viele Standorte in Deutschland offen.

Jeder Standort soll diese MySQL-Verbindung herstellen können.

Natürlich sind wir auch alle in einem VPN. Dieses VPN wollen wir aber für wichtige Dinge nutzen, die sich nur übers VPN machen lassen :P

Kurz: Ja, der Server muss im Internet "stehen" ;)

Cache ist ja ok, MySQL hat ja schon möglichkeiten die Abfragen zu optimieren u.s.w. .

Wenn ich Daten übers Netzwerk sende und meine Netzwerkauslastung beträgt, laut Windows taskmanager, 50%, dann kann ich 50% von 1 Gbit rechnen und habe die Auslastung.

Nur eben bei solchen kleinen Mengen wie meine SQL-Abfragen, interessiert es mich, wie man den dortigen Datenverkehr am besten berrechnen/herausfinden kann :)

LG XspYroX

Geschrieben

Natürlich sind wir auch alle in einem VPN. Dieses VPN wollen wir aber für wichtige Dinge nutzen, die sich nur übers VPN machen lassen :P

Die Tatsache das auf dem MySQL-Server vermutlich geschäftsrelevante Daten lagern, reicht nicht aus, damit seine Daten in den Genuss des VPN-Tunnels kommen? Wenn man schon den Aufwand mit dem VPN betreibt, dann sollte man dort auch generell erstmal alles an Geschäftsdaten durchschieben, was möglich ist. Eigentlich braucht man gar nichts über ein VPN zu machen. Alle Dienste funktionieren auch ohne.

(Ja, ist Offtopic.)

Dieser Dienst macht alle 15 minuten eine abfrage übers internet an einen mysql-server (der mysql-server ist auch von mir).

Die Clients machen die Abfrage aber nach 15 +/- x Minuten, wobei x von Client zu Client unterschiedlich ist?

Ich würde einfach den Traffic messen, den ein Client pro Abfrage verursacht. Das ist zwar der TCP-/IP-Overhead bei, aber der ist generell immer dabei und kann ggf. abgezogen werden.

Geschrieben (bearbeitet)
Die Tatsache das auf dem MySQL-Server vermutlich geschäftsrelevante Daten lagern, reicht nicht aus, damit seine Daten in den Genuss des VPN-Tunnels kommen? Wenn man schon den Aufwand mit dem VPN betreibt, dann sollte man dort auch generell erstmal alles an Geschäftsdaten durchschieben, was möglich ist. Eigentlich braucht man gar nichts über ein VPN zu machen. Alle Dienste funktionieren auch ohne.

(Ja, ist Offtopic.)

Die Clients machen die Abfrage aber nach 15 +/- x Minuten, wobei x von Client zu Client unterschiedlich ist?

Ich würde einfach den Traffic messen, den ein Client pro Abfrage verursacht. Das ist zwar der TCP-/IP-Overhead bei, aber der ist generell immer dabei und kann ggf. abgezogen werden.

Zu deinem ersten Abschnitt:

Jo ist offtopic ;) Aber um noch kurz was dazu zu sagen: Wir haben mehrere Internetleitungen pro Standort. Manche im Load-Balancing, manche einzeln.

Wir haben zum Teil große Datenmengen, die die Leitungen auslasten.

Daher haben wir eine bestimmte Aufteilung, welche Daten durch das VPN gehen und welche nicht ;)

Zum 2. Abschnitt:

Das würde auch gehen. Allerdings habe ich schonmal versucht auf einem Client genau herauszufinden, wieviele Bytes/KB ein Prozess im Netzwerk verursacht und.... so richtig hat das alles nicht geklappt.

Was würdest du denn als die einfaste, aber auch genaue, Messmethode vorschlagen? Habe Windows 8, 64 Bit.

PS: Und ja, deine Annahme von 15 Minuten -+ X ist korrekt.

Der Dienst startet als "automatisch (verzögerter start)" und fängt dann an die 15 Minuten zu zählen.

Das bedeutet, dass es auf den Startzeitpunkt des Rechners, auf die Geschwindigkeit des Hochfahrens und auf die Dauer anderer update-scripte von uns ankommt, wann der dienst die DB-Abfrage startet.

Wäre also wirklich starker Zufall, wenn die Abfragen gleichzeitig geschehen ;)

Vielen Dank schonmal :)

XspYroX

Bearbeitet von XspYroX
Geschrieben
Allerdings habe ich schonmal versucht auf einem Client genau herauszufinden, wieviele Bytes/KB ein Prozess im Netzwerk verursacht und.... so richtig hat das alles nicht geklappt.
Dann war bei "das alles" der Ressourcenmonitor nicht dabei?
Geschrieben
Dann war bei "das alles" der Ressourcenmonitor nicht dabei?

Doch. Da werden aber nur die Bytes/s angezeigt. Und da der Wert pro Minute gemittelt wird, habe ich keine wirkliche chance den realen wert da rauszurechnen.

Auch die bytes als windows leistungsindikator hinzuzufügen, hilft nichts, da das dort nur prozent werte zu sein scheinen :/

Geschrieben (bearbeitet)
Da werden aber nur die Bytes/s angezeigt. Und da der Wert pro Minute gemittelt wird, habe ich keine wirkliche chance den realen wert da rauszurechnen.
Dann bau eben eine Testversion deines Dienstes, die alle 15 Sekunden arbeitet.

EDIT: Die aktuelle Version des Process Explorer kann die gesamte Netzwerkaktivität anzeigen.

Bearbeitet von Klotzkopp
Geschrieben

Das ganze hat doch überhaupt nix mit einer Datenbank zu tun. Wie bereits gesagt wurde musst du das Protokoll bzw. Format kennen wie deine Daten übers Netz geschickt werden. Welche Daten verschickt werden schreibst du weißt du ja, also musst du nur noch ausrechnenen wieviele Bytes diese Daten in dem Format ausmachen und dann hast du deine Netzwerkauslastung.

Geschrieben

Wäre es nicht sinnvoll, das Ganze erst mal grob überschlagsmäßig zu betrachten?

Wenn eine Abfrage 100Kb Traffic verursacht machen halt ~125 gleichzeitige Abfragen vllt. eine 100 Mbit/s Leitung kurzzeitig dicht - bzw. wenn es z.B. doppelt so viele Anfragen wären, steigt halt die Latenz (die spielt überhaupt eine Rolle?)..

Sicher kann man das in einer Testumgebung recht genau simulieren - inkl. Latenz- und Durchsatzschwankungen wie sie im realen Internet vorkommen - frage ist nur ob sich der Aufwand lohnt :P

Sascha

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...