So schätzen Sie das Netzwerkdatenübertragungsvolumen für eine MySQL-Datenbank

7

Bei der Planung, meine Anwendung (Java + Tomcat + MySql) auf ein Cloud-Hosting zu portieren, habe ich festgestellt, dass ein wichtiger zu berücksichtigender Faktor das Datenvolumen ist, das zur / von der Datenbank übertragen wird, da es von Cloud-Anbietern begrenzt wird. Ich habe keine bequeme Möglichkeit gefunden, dieses Volumen basierend auf Nutzungsstatistiken (z. B. Anzahl der Abfragen und durchschnittliche Zeilengröße) zu schätzen, und auch keine Möglichkeit, die aktuelle Auslastung zu messen.

Gibt es Statistiken in MySql, die ich verwenden könnte, oder ist es besser, diese aus der Netzwerkperspektive zu überwachen und die Daten zu überwachen, die von / zu dem von MySql verwendeten Port übertragen werden.

Danke im Voraus

Pablochacin
quelle

Antworten:

5

Wenn Sie den Netzwerkverkehr in und aus MySQL in Ihrer Anwendung direkt messen möchten, können Sie zwei Statusvariablen überwachen:

  • Bytes_received : Die Anzahl der von allen Clients empfangenen Bytes
  • Bytes_sent : Die Anzahl der an alle Clients gesendeten Bytes

GLOBALE EBENE

Mit dieser Abfrage können Sie diese für alle Sitzungen (Vergangenheit und Gegenwart) abrufen

SELECT * FROM information_schema.global_status
WHERE variable_name IN ('Bytes_received','Bytes_sent');

Dadurch erhalten Sie die Nummer für die Lebensdauer der MySQL-Instanz.

SITZUNGSSTUFE

Sie können diese für jede Sitzung mit abrufen

SELECT * FROM information_schema.session_status
WHERE variable_name IN ('Bytes_received','Bytes_sent');

Auf diese Weise erhalten Sie jeweils die Nummer für die Lebensdauer der DB-Sitzung.

Sie können GUIs verwenden, um sie über die Zeit grafisch darzustellen. Da Sie Java und Tomcat erwähnt haben, möchten Sie möglicherweise Ihre eigene Präsentation erstellen. Sie müssten die vorherigen Werte beibehalten, die aktuellen Werte abrufen, subtrahieren und dann die Durchschnittswerte nach Ihren Wünschen zeichnen oder anzeigen.

Versuche es !!!

VORBEHALT

Ich habe dies vor langer Zeit im DBA StackExchange besprochen ( MySQL: Enthält 'bytes_sent' und 'bytes_received' mysqldump-Daten? ) Alles, was einen Thread hat, wird in diesen beiden Variablen gezählt, einschließlich Interna wie das für MySQL Replication (über die IO-Thread und SQL-Thread).

Stellen Sie vor diesem Hintergrund sicher, dass Sie keine unnötigen DB-Verbindungen haben, die Lesevorgänge ausführen, und dass Sie MySQL während eines mysqldump oder eines erneuten Ladens eines mysqldump nicht überwachen. Selbst Überwachungssoftware (wie Nagios, Zabbix, MONYog, EM7 usw.) generiert bei Bytes_receivedjeder Ausführung DatenverkehrSHOW GLOBAL VARIABLES;

VORSCHLAG

Da alles auf mysqld verbunden wird , die globalen Auswirkungen auf Bytes_receivedund Bytes_sentStatuswerte, können Sie Ihre Anwendung haben wollen collect die Session-Ebene Bytes_receivedund Bytes_sentkurz vor dem Lauf mysqli_close () . Anschließend können Sie einen Bericht mit diesen Zahlen erstellen. Sie können diese Summen dann von den globalen Zählungen abziehen, um zu sehen, wie viele Verwaltungsdaten angefordert werden.

RolandoMySQLDBA
quelle
Danke @RolandoMySQLDB. Es sieht so aus, als würde eine Replikation diese Statistik in meinem Fall ziemlich nutzlos machen.
Pablochacin
Das gilt für den globalen Status. Möglicherweise möchten Sie darüber nachdenken, dass alle Benutzersitzungen ihren individuellen Byteverkehr in einer gemeinsamen Tabelle sammeln und bei Bedarf abrechnen.
RolandoMySQLDBA
Ich werde meinen vorherigen Kommentar zu meiner Antwort hinzufügen.
RolandoMySQLDBA
0

Am einfachsten wäre es, die MySQL Workbench zu starten . Obwohl die ordnungsgemäße Einrichtung der Serververwaltungsfunktionen einige kleine Anstrengungen erfordern kann, werden Diagramme für die Netzwerkauslastung angezeigt, und es ist ein rundum hervorragendes Tool für die Verwaltung von MySQL-Instanzen. Eine webbasierte Lösung für die MySQL-Administration ist phpMyAdmin , die auch MySQL-Statistiken bereitstellt. Beachten Sie jedoch, dass phpMyAdmin in der Vergangenheit mehrere schwerwiegende Sicherheitslücken aufwies (z. B. die vollständige Übernahme eines Systems). Ich empfehle daher dringend, stattdessen die MySQL Workbench zu verwenden. (Tangential: wenn Sie wirklichWenn Sie phpMyAdmin verwenden möchten oder müssen, stellen Sie sicher, dass Sie ein Authentifizierungsschema vor phpMyAdmin haben. Damit böswillige Personen sogar Ihre phpMyAdmin-Anmeldung sehen können, müssen sie Ihre erste Anmeldeschicht durchlaufen. Meine Server erfordern beispielsweise eine Standardauthentifizierung über HTTPS und überprüfen den angegebenen Benutzernamen und das Kennwort anhand von PAM, bevor sie Zugriff auf die Anmeldeseite von phpMyAdmin gewähren.)

Wenn Sie auch an einer allgemeinen Statistiksammlung mit vielen hübschen Grafiken interessiert sind, ist Munin eine gute Lösung. Sie enthält auch eine Sammlung von MySQL-Überwachungs-Plugins, die jedoch zuerst konfiguriert werden müssen und für die einige Perl-Abhängigkeiten installiert werden müssen Die MySQL-Überwachungs-Plugins funktionieren ( Cache::Cacheund DBD::MySQLgemäß den Kommentaren in den Plugin-Skripten).

Denken Sie schließlich daran, dass die Abrechnung des MySQL-Datenverkehrs nur dann ein Problem darstellt, wenn sich Ihre Anwendung und Datenbank auf verschiedenen Servern befinden. localhost-Verkehr nicht gemessen (oder daher in Rechnung gestellt).

FastLizard4
quelle