So verwenden Sie MySQL-Stresstest-Tools

So verwenden Sie MySQL-Stresstest-Tools

1. MySQLs eigenes Stresstest-Tool – Mysqlslap

mysqlslap ist ein Benchmark-Tool, das mit MySQL geliefert wird. Das Tool fragt Daten mit einfacher Syntax ab, ist flexibel und benutzerfreundlich. Das Tool kann mehrere Clients simulieren, die gleichzeitig Abfrageaktualisierungen an den Server senden, Leistungstestdaten liefern und Leistungsvergleiche mehrerer Engines ermöglichen. mysqlslap bietet eine intuitive Grundlage für die Überprüfung der MySQL-Leistung vor und nach der Optimierung. Systembetriebs- und -wartungspersonal sowie DBA-Mitarbeiter sollten einige gängige Stresstest-Tools beherrschen, um die Obergrenze des von der Online-Datenbank unterstützten Benutzerverkehrs und ihre Stressresistenz genau zu erfassen.

1. Ändern Sie die standardmäßige maximale Anzahl von Verbindungen

Bevor Sie MySQL einem Stresstest unterziehen, müssen Sie die standardmäßige maximale Anzahl an Verbindungen wie folgt ändern:

[root@mysql ~]# vim /etc/my.cnf 
................
[mysqld]
max_Verbindungen=1024
[root@mysql ~]# systemctl starte mysqld neu
#Maximale Anzahl an Verbindungen anzeigenmysql> Variablen wie „max_connections“ anzeigen;    
+-----------------+--------+
| Variablenname | Wert |
+-----------------+--------+
| max_Verbindungen | 1024 |
+-----------------+--------+
1 Zeile im Satz (0,00 Sek.)

So führen Sie einen Stresstest durch:

[root@mysql ~]# mysqlslap --defaults-file=/etc/my.cnf --concurrency=100,200 --iterations=1 --number-int-cols=20 --number-char-cols=30 --auto-generate-sql --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=gemischt --engine=myisam,innodb --number-of-queries=2000 -uroot -p123 --verbose

Die obige Befehlstestbeschreibung: simuliert zwei Lese- und Schreib-Parallelitätstests, das erste Mal ist 100, das zweite Mal ist 200, generiert automatisch SQL-Skripte, die Testtabelle enthält 20 Init-Felder, 30
Zeichenfelder und führt jedes Mal 2000 Abfrageanforderungen aus. Die Test-Engines sind Myisam und InnoDB. (Viele der oben genannten Optionen sind Standardwerte und können weggelassen werden. Wenn Sie die Erklärung der einzelnen Optionen wissen möchten, können Sie mysqlslap --help zur Abfrage verwenden.)

Der obige Befehl gibt die folgenden Ergebnisse zurück:


Beschreibung der Testergebnisse: Myisam benötigt beim ersten Mal 0,557/s, wenn 100 Clients gleichzeitig eine zusätzliche Abfrage initiieren, und beim zweiten Mal 0,522/s, wenn 200 Clients gleichzeitig eine zusätzliche Abfrage initiieren. Innodb benötigt beim ersten Mal 0,256/s, wenn 100 Clients gleichzeitig eine zusätzliche Abfrage initiieren, und beim zweiten Mal 0,303/s, wenn 200 Clients gleichzeitig eine zusätzliche Abfrage initiieren.

Sie können die Anzahl gleichzeitiger Anfragen schrittweise erhöhen, um Stresstests entsprechend dem tatsächlichen Bedarf durchzuführen.

2. Verwenden Sie Sysbench-Tools von Drittanbietern für Stresstests

1. Installieren Sie das Sysbench-Tool

[root@mysql ~]# yum -y install epel-release #Drittanbieter-Epel-Quelle installieren[root@mysql ~]# yum -y install sysbench #Sysbench-Tool installieren[root@mysql ~]# sysbench --version #Bestätigen Sie, dass das Tool installiert wurde sysbench 1.0.17

Sysbench kann die folgenden Tests durchführen:

  • CPU-Rechenleistungstest
  • Disk-IO-Leistungstest
  • Scheduler-Leistungstests
  • Test der Speicherzuordnung und Übertragungsgeschwindigkeit
  • POSIX-Thread-Leistungstest
  • Datenbank-Leistungstest (OLTP-Benchmark-Test, der über das Lua-Skript im Verzeichnis /usr/share/sysbench/ ausgeführt werden muss, z. B. das Skript oltp_read_only.lua, um schreibgeschützte Tests durchzuführen)
  • Sysbench kann den Test auch anpassen, indem Sie beim Ausführen des Befehls Ihr eigenes Lua-Skript angeben.

2. Sehen Sie sich die Hilfeoptionen des Sysbench-Tools an

[root@mysql ~]# sysbench --help
Verwendung:
 sysbench [Optionen]... [Testname] [Befehl]

Von den meisten Tests implementierte Befehle: prepare run cleanup help # Verfügbare Befehle, vier Allgemeine Optionen: # Allgemeine Optionen --threads=N Die Anzahl der zu verwendenden Threads, Standard ist 1 [1]
 --events=N Maximale Anzahl erlaubter Ereignisse [0]
 --time=N Maximale Gesamtausführungszeit in Sekunden [10]
 --forced-shutdown=STRING Anzahl der Sekunden, die nach dem --time-Limit gewartet werden soll, bevor das Herunterfahren erzwungen wird, oder „off“, um es zu deaktivieren [off]
 --thread-stack-size=SIZE Die Stapelgröße für jeden Thread [64K]
 --rate=N Durchschnittliche Übertragungsrate. 0 bedeutet keine Begrenzung[0]
 --report-interval=N Periodisch Zwischenstatistiken mit dem angegebenen Intervall in Sekunden berichten 0 Zwischenberichterstattung deaktivieren [0]
 --report-checkpoints=[LIST,...] Vollständige Statistiken ausgeben und alle Zähler zu den angegebenen Zeitpunkten zurücksetzen. Der Parameter ist eine durch Kommas getrennte Liste von Werten, die angeben, dass ein Berichtsprüfpunkt ausgeführt werden muss, wenn diese Zeitspanne (in Sekunden) seit dem Start des Tests vergangen ist. Die Berichtsprüfpunkte sind standardmäßig deaktiviert. []
 --debug[=on|off] Weitere Debug-Informationen ausgeben [off]
 --validate[=on|off] Führt Validierungsprüfungen durch, wenn möglich [off]
 --help[=on|off] Hilfeinformationen anzeigen und beenden [off]
 --version[=on|off] Versionsinformationen anzeigen und beenden [off]
 --config-file=DATEINAME Datei mit Kommandozeilenoptionen --tx-rate=N Veraltet, verwenden Sie stattdessen --rate [0]
 --max-requests=N ist veraltet, verwenden Sie stattdessen --events [0]
 --max-time=N ist veraltet, verwenden Sie stattdessen --time [0]
 --num-threads=N ist veraltet, verwenden Sie stattdessen --threads [1]

Optionen für den Pseudozufallszahlengenerator: # Optionen für den Pseudozufallszahlengenerator --rand-type=STRING Zufallszahlenverteilung {uniform,gaussian,special,pareto} [special]
 --rand-spec-iter=N Anzahl der Iterationen, die zur Generierung der Zahlen verwendet werden [12]
 --rand-spec-pct=N Prozentsatz der Werte, die als 'speziell' behandelt werden sollen (für spezielle Verteilung) [1]
 --rand-spec-res=N Prozentsatz der zu verwendenden 'speziellen' Werte (für spezielle Verteilung) [75]
 --rand-seed=N Seed für Zufallszahlengenerator. Wenn 0, wird die aktuelle Zeit als RNG-Seed verwendet. [0]
 --rand-pareto-h=N Parameter h für Pareto-Verteilung [0,2]

Log options: # Log options --verbosity=N Ausführlichkeitsstufe {5 - debug, 0 - nur kritische Meldungen} [3]

 --percentile=N Perzentil, das in Latenzstatistiken berechnet werden soll (1-100). Verwenden Sie den Sonderwert 0, um die Perzentilberechnung zu deaktivieren [95]
 --histogram[=on|off] Latenz-Histogramm im Bericht drucken [off]

Allgemeine Datenbankoptionen: # Allgemeine Datenbankoptionen --db-driver=STRING Geben Sie den zu verwendenden Datenbanktreiber an (mit „Hilfe“ erhalten Sie eine Liste der verfügbaren Treiber).
 --db-ps-mode=STRING Verwendungsmodus für vorbereitete Anweisungen {auto, disable} [auto]
 --db-debug[=on|off] druckt datenbankspezifische Debug-Informationen [off]

Kompilierte Datenbanktreiber: # Integrierter Datenbanktreiber, unterstützt standardmäßig MySQL und PostgreSQL
 MySQL-Treiber
 pgsql - PostgreSQL-Treiber

MySQL-Optionen: # MySQL-Datenbank-spezifische Optionen --mysql-host=[LIST,...] MySQL-Server-Host [localhost]
 --mysql-port=[LIST,...] MySQL-Server-Port [3306]
 --mysql-socket=[LISTE,...] MySQL-Socket
 --mysql-user=STRING MySQL-Benutzer [sbtest]
 --mysql-password=STRING MySQL-Passwort []
 --mysql-db=STRING MySQL-Datenbankname [sbtest]
 --mysql-ssl[=on|off] SSL-Verbindungen verwenden, falls in der Client-Bibliothek verfügbar [off]
 --mysql-ssl-cipher=STRING verwendet einen bestimmten Chiffretyp für SSL-Verbindungen []
 --mysql-compression[=on|off] Komprimierung verwenden, falls in der Client-Bibliothek verfügbar [off]
 --mysql-debug[=on|off] alle Client-Bibliotheksaufrufe verfolgen [aus]
 --mysql-ignore-errors=[LIST,...] Liste der zu ignorierenden Fehler oder „alle“ [1213,1020,1205]
 --mysql-dry-run[=on|off] Trockenlauf, so tun, als ob alle MySQL-Client-API-Aufrufe erfolgreich wären, ohne sie auszuführen [off]

pgsql-Optionen: # PostgreSQL-Datenbank-spezifische Optionen --pgsql-host=STRING PostgreSQL-Server-Host [localhost]
 --pgsql-port=N PostgreSQL-Server-Port [5432]
 --pgsql-user=STRING PostgreSQL-Benutzer [sbtest]
 --pgsql-password=STRING PostgreSQL-Passwort []
 --pgsql-db=STRING PostgreSQL-Datenbankname [sbtest]

Einkompilierte Tests: # Eingebauter Testtyp fileio - Datei-E/A-Test
 cpu - CPU-Leistungstest
 Speicher - Geschwindigkeitstest der Speicherfunktionen
 Threads - Leistungstest des Thread-Subsystems
 mutex - Mutex-Leistungstest

Eine Liste der Optionen für jeden Test finden Sie unter „Sysbench <Testname>-Hilfe“.

3. Sysbench testet die Leistung von MySQL-Datenbanken

1) Testdaten vorbereiten

#Sehen Sie sich die Verwendung des Lua-Skripts an, das mit sysbench geliefert wird [root@mysql ~]# sysbench /usr/share/sysbench/oltp_common.lua help
#Sie müssen die sbtest-Bibliothek erstellen. Dies ist der von Sysbench verwendete Standardbibliotheksname [root@mysql ~]# mysqladmin -uroot -p123 create sbtest;
#Bereiten Sie dann die zum Testen verwendeten Tabellen vor. Diese Testtabellen werden in der Testbibliothek sbtest abgelegt. Das hier verwendete Lua-Skript ist /usr/share/sysbench/oltp_common.lua
[root@mysql ~]# sysbench --mysql-host=127.0.0.1 \
> --mysql-port=3306 \
> --mysql-user=root \
> --mysql-password=123 \
> /usr/share/sysbench/oltp_common.lua \
> --tables=10 \
> --table_size=100000 \
> vorbereiten
#--tables=10 bedeutet, dass 10 Testtabellen erstellt werden.
#--table_size=100000 bedeutet, dass in jede Tabelle 100.000 Datenzeilen eingefügt werden.
#prepare gibt an, dass dies der Vorgang der Nummernvorbereitung ist.

2) Bestätigen Sie, dass die Testdaten vorhanden sind

[root@mysql ~]# mysql -uroot -p123 sbtest; #Melden Sie sich bei der sbtest-Bibliothek anmysql> show tables; #Zeigen Sie die entsprechenden Tabellen an+------------------+
| Tabellen_in_sbtest |
+------------------+
|sbtest1|
|sbtest10|
|sbtest2|
|sbtest3|
|sbtest4|
|sbtest5|
|sbtest6|
|sbtest7|
|sbtest8|
|sbtest9|
+------------------+
10 Zeilen im Satz (0,00 Sek.)

mysql> select count(*) from sbtest1; #Wählen Sie nach dem Zufallsprinzip eine Tabelle aus und bestätigen Sie, dass sie 100.000 Datensätze enthält+----------+
| Anzahl(*) |
+----------+
| 100000 |
+----------+
1 Zeile im Satz (0,01 Sek.)

3) Datenbanktests und Ergebnisanalyse

Ändern Sie die Anweisung, mit der die Daten zuvor vorbereitet wurden, leicht und Sie können sie zum Testen verwenden.

Es ist zu beachten, dass das zuvor verwendete Lua-Skript oltp_common.lua ist. Dabei handelt es sich um ein allgemeines Skript, das von anderen Lua-Skripten aufgerufen wird und nicht direkt zum Testen verwendet werden kann.

Daher verwende ich das Skript oltp_read_write.lua, um Lese- und Schreibtests durchzuführen. Es gibt viele andere Testtypen, z. B. Nur-Lese-Tests, Nur-Schreib-Tests, Löschtests, Masseneinfügetests und so weiter. Sie können das entsprechende Lua-Skript finden und aufrufen.

#Führen Sie den Testbefehl wie folgt aus:
[root@mysql ~]# sysbench --threads=4 \
> --time=20 \
> --report-interval=5 \
> --mysql-host=127.0.0.1 \
> --mysql-port=3306 \
> --mysql-user=root \
> --mysql-password=123 \
> /usr/share/sysbench/oltp_read_write.lua \
> --tables=10 \
> --table_size=100000 \
> laufen

Der obige Befehl gibt die folgenden Ergebnisse zurück:

[root@mysql ~]# sysbench --threads=4 --time=20 --report-interval=5 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root --mysql-password=123 /usr/share/sysbench/oltp_read_write.lua --tables=10 --table_size=100000 ausführen

sysbench 1.0.17 (unter Verwendung des Systems LuaJIT 2.0.4)

Ausführen des Tests mit folgenden Optionen:
Anzahl der Threads: 4
Zwischenergebnisse alle 5 Sekunden melden
Initialisierung des Zufallszahlengenerators ab aktueller Zeit

Arbeitsthreads werden initialisiert …

Themen gestartet!
#Die folgenden Ergebnisse werden alle 5 Sekunden zurückgegeben. Die statistischen Indikatoren umfassen:
# Anzahl der Threads, tps (Transaktionen pro Sekunde), qps (Abfragen pro Sekunde),
# Lese-/Schreib-/andere Zeiten pro Sekunde, Latenz, Fehler pro Sekunde, Wiederverbindungen pro Sekunde [5 s] thds: 4 tps: 1040,21 qps: 20815,65 (r/w/o: 14573,17/4161,25/2081,22) lat (ms, 95 %): 7,17 err/s: 0,00 reconn/s: 0,00
[ 10s ] thds: 4 tps: 1083,34 qps: 21667,15 (r/w/o: 15165,93/4334,55/2166,68) lat (ms,95%): 6,55 err/s: 0,00 reconn/s: 0,00
[ 15s ] thds: 4 tps: 1121,57 qps: 22429,09 (r/w/o: 15700,64/4485,30/2243,15) lat (ms,95%): 6,55 err/s: 0,00 reconn/s: 0,00
[ 20s ] thds: 4 tps: 1141.69 qps: 22831.98 (r/w/o: 15982.65/4566.16/2283.18) lat (ms,95%): 6.09 err/s: 0.00 reconn/s: 0.00
SQL-Statistiken:
  Durchgeführte Abfragen:
    Lesen: 307146 # Anzahl der ausgeführten LesevorgängeSchreiben: 87756 # Anzahl der ausgeführten SchreibvorgängeSonstiges: 43878 # Anzahl der ausgeführten sonstigen VorgängeGesamt: 438780
  Transaktionen: 21939 (1096,57 pro Sek.) # Durchschnittliche Rate der Abfragen zur Transaktionsausführung: 438780 (21931,37 pro Sek.) # Durchschnittliche Anzahl der pro Sekunde ausgeführten Abfragen, ignorierte Fehler: 0 (0,00 pro Sek.)
  Wiederverbindungen: 0 (0,00 pro Sek.)

Allgemeine Statistiken:
  Gesamtzeit: 20,0055 s # Gesamtzeitaufwand Gesamtzahl der Ereignisse: 21939 # Gesamtzahl der Anfragen (Lesen, Schreiben, Sonstiges)

Latenz (ms):
     Mindestens: 1,39
     Durchschnitt: 3,64
     max: 192,05
     95. Perzentil: 6,67 # Durchschnittliche Latenzzeit berechnet durch Stichprobensumme: 79964,26

Fairness der Themen:
  Ereignisse (Durchschnitt/Standardabweichung): 5484,7500/15,12
  Ausführungszeit (Durchschnitt/Standardabweichung): 19,9911/0,00

4. CPU/IO/Speicher und andere Tests

Einige in Sysbench integrierte Testindikatoren sind die folgenden:

[root@mysql ~]# sysbench --help
   .......... # Einige Inhalte weglassen Einkompilierte Tests:
 fileio - Datei-E/A-Test
 cpu - CPU-Leistungstest
 Speicher - Geschwindigkeitstest der Speicherfunktionen
 Threads - Leistungstest des Thread-Subsystems
 mutex - Mutex-Leistungstest

Sie können Testmethoden direkt ausgeben lassen, zum Beispiel Fileio-Test:

[root@mysql ~]# sysbench fileio Hilfe
sysbench 1.0.17 (unter Verwendung des Systems LuaJIT 2.0.4)

Fileio-Optionen:
 --file-num=N Anzahl der zu erstellenden Dateien [128]
 --file-block-size=N Blockgröße, die bei allen IO-Operationen verwendet werden soll [16384]
 --file-total-size=SIZE Gesamtgröße der zu erstellenden Dateien [2G]
 --file-test-mode=STRING Testmodus {seqwr, seqrewr, seqrd, rndrd, rndwr, rndrw}
 --file-io-mode=STRING Dateioperationsmodus {sync,async,mmap} [sync]
 --file-async-backlog=N Anzahl der asynchronen Operationen zur Warteschlange pro Thread [128]
 --file-extra-flags=[LIST,...] Liste zusätzlicher Flags, die zum Öffnen von Dateien verwendet werden sollen {sync,dsync,direct} []
 --file-fsync-freq=N führe fsync() nach dieser Anzahl von Anfragen aus (0 - verwende fsync() nicht) [100]
 --file-fsync-all[=on|off] führe fsync() nach jedem Schreibvorgang aus [aus]
 --file-fsync-end[=on|off] führe fsync() am Ende des Tests aus [on]
 --file-fsync-mode=STRING welche Methode zur Synchronisierung verwendet werden soll {fsync, fdatasync} [fsync]
 --file-merged-requests=N höchstens diese Anzahl an IO-Anfragen zusammenführen wenn möglich (0 - nicht zusammenführen) [0]
 --file-rw-ratio=N Lese-/Schreibverhältnis für kombinierten Test [1.5]

1) Testen Sie die io-Leistung

Erstellen Sie beispielsweise 5 Dateien mit einer Gesamtgröße von 2 GB, wobei jede Datei etwa 400 MB groß ist.

[root@mysql ~]# sysbench fileio --file-num=5 --file-total-size=2G vorbereiten
[root@mysql ~]# ll -lh test*
-rw------ 1 root root 410M 26. Mai 16:05 test_file.0
-rw------ 1 root root 410M 26. Mai 16:05 test_file.1
-rw------ 1 root root 410M 26. Mai 16:05 test_file.2
-rw------ 1 root root 410M 26. Mai 16:05 test_file.3
-rw------ 1 root root 410M 26. Mai 16:05 test_file.4

Führen Sie dann den Test aus:

[root@mysql ~]# sysbench --events=5000 \
> --threads=16 \
> Dateiio \
> --file-num=5 \
> --file-total-size=2G \
> --file-test-mode=rndrw \
> --file-fsync-freq=0 \
> --file-block-size=16384 \
> laufen

Die zurückgegebenen Ergebnisse lauten wie folgt:

Ausführen des Tests mit folgenden Optionen:
Anzahl der Threads: 16
Initialisierung des Zufallszahlengenerators ab aktueller Zeit

Zusätzliche Flags zum Öffnen von Dateien: (keine)
5 Dateien, jeweils 409,6 MiB
2 GiB Gesamtdateigröße
Blockgröße 16KiB
Anzahl der IO-Anfragen: 5000
Lese-/Schreibverhältnis für kombinierten Random-IO-Test: 1,50
Aufruf von fsync() am Ende des Tests, Aktiviert.
Verwenden des synchronen E/A-Modus
Durchführen eines zufälligen Lese-/Schreibtests
Arbeitsthreads werden initialisiert …

Themen gestartet!

Dateioperationen:
  liest/s: 9899.03
  Schreibungen: 6621.38
  Anzahl der Synchronisationen/s: 264,33

Durchsatz: # Durchsatz beim Lesen, MiB/s: 154,66 # Gibt die Bandbreite beim Lesen an, geschrieben, MiB/s: 103,46 # Gibt die Bandbreite beim Schreiben an Allgemeine Statistiken:
  Gesamtzeit: 0,3014 s
  Gesamtzahl der Veranstaltungen: 5000

Latenz (ms):
     min: 0.00
     Durchschnitt: 0,81
     max: 53,56
     95. Perzentil: 4,10
     Summe: 4030,48

Fairness der Themen:
  Ereignisse (Durchschnitt/Standardabweichung): 312,5000/27,64
  Ausführungszeit (Durchschnitt/Standardabweichung): 0,2519/0,02

2) Testen Sie die CPU-Leistung

[root@mysql ~]# sysbench cpu --threads=40 --events=10000 --cpu-max-prime=20000 ausführen

Dies ist das Ende dieses Artikels über die Verwendung des MySQL-Stresstest-Tools. Weitere Informationen zu MySQL-Stresstest-Tools finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Detaillierte Erklärung des mysqlslap-Befehls und der Syntax für den integrierten Stresstest in MySQL 5.7
  • Methode zum Testen von MySQL-Stress. Wie verwende ich mysqlslap zum Testen von MySQL-Stress?
  • Mysqlslap MySQL-Stresstest-Tool – einfaches Tutorial
  • Einführung und Verwendung des MySQL-Stresstesttools mysqlslap
  • Detailliertes Tutorial zum Sysbench-Stresstest von MySQL
  • Beispiel eines MySQL-Stresstestskripts
  • Verwendung des MySQL-Stresstesttools Mysqlslap

<<:  Skin-Change-Lösung basierend auf Vue kombiniert mit ElementUI

>>:  Automatische Hot-Deployment/Neustart von Jenkins+Tomcat und Lösungen für aufgetretene Probleme (empfohlen)

Artikel empfehlen

React Native JSI implementiert Beispielcode für RN und native Kommunikation

Inhaltsverzeichnis Was ist JSI Was ist anders an ...

Vue2-Implementierungen bieten Injection für Reaktionsfähigkeit

1. Konventionelles Schreiben in vue2 // Die überg...

Docker richtet Port-Mapping ein, kann aber nicht auf die Lösung zugreifen

#docker ps-Check, alle Ports sind zugeordnet CONT...

So installieren Sie die grafische Benutzeroberfläche unter Linux

1. Linux-Installation (Root-Benutzerbetrieb) 1. I...

Wie können die Transaktionseigenschaften von MySQL InnoDB sichergestellt werden?

Vorwort Wenn Sie jemand fragt: „Was sind die Merk...

Detaillierter Prozess zum Zeichnen dreidimensionaler Pfeillinien mit three.js

Nachfrage: Diese Nachfrage ist ein dringender Bed...

Erfahren Sie, wie Sie den JVM-Speicher von Tomcat über JConsoler überwachen

Inhaltsverzeichnis 1. So überwachen Sie Tomcat 2....