Verwendung des MySQL-Stresstesttools Mysqlslap

Verwendung des MySQL-Stresstesttools Mysqlslap

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
`

Zeigen Sie die maximale Anzahl an Verbindungen an `mysql> zeigt Variablen wie „max_connections“ an;
+-----------------+--------+
| 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 Testbeschreibung des obigen Befehls: Simulieren Sie zwei Lese- und Schreibparallelitätstests, das erste Mal 100, das zweite Mal 200, und das SQL-Skript wird automatisch generiert. Die Testtabelle enthält 20 Init-Felder und 30 Zeichenfelder. Jedes Mal werden 2000 Abfrageanforderungen ausgeführt. 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 zur Abfrage mysqlslap --help verwenden).

Beschreibung der Testergebnisse:

  • Myisam benötigt beim ersten Mal 0,557/s, wenn 100 Clients gleichzeitig zusätzliche Prüfungen initiieren, und beim zweiten Mal 0,522/s, wenn 200 Clients gleichzeitig zusätzliche Prüfungen initiieren.
  • Innodb verwendet 0,256/s zum ersten Mal, wenn 100 Clients gleichzeitig eine inkrementelle Abfrage initiieren, und 0,303/s zum zweiten Mal, wenn 200 Clients gleichzeitig eine inkrementelle 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 Lua-Skripte 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 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] Hilfemeldung 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: # Integrierte Datenbanktreiber, die standardmäßig MySQL und PostgreSQL unterstützen
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
#Die sbtest-Bibliothek muss erstellt werden. sbtest 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
 Datei
 --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

Bitte seien Sie bei der Durchführung von Stresstests vorsichtig! ! ! !

Oben finden Sie ausführliche Informationen zur Verwendung des MySQL-Stresstesttools Mysqlslap. Weitere Informationen zur Verwendung von Mysqlslap finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

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

<<:  Detaillierte Erklärung der KeepAlive-Verwendung in der Vue-Frontend-Entwicklung

>>:  Detaillierte Erklärung, wie Sie verhindern können, dass Inhalte auf HTML-Seiten ausgewählt, kopiert oder mit der rechten Maustaste angeklickt werden.

Artikel empfehlen

Details zum Lazy Loading im Vue-Routing

Inhaltsverzeichnis 1. Was ist Lazy Loading von Ro...

Vue implementiert horizontales Scrollen von Text im Laufschriftstil

In diesem Artikel wird der spezifische Code für V...

So verwenden Sie MySQL zur Abdeckung von Index- und Tabellenrückgabe

Zwei Hauptkategorien von Indizes Verwendete Speic...

Detaillierte Erläuterung der Verwendung des gcc-Befehls unter Linux

Inhaltsverzeichnis 1. Vorverarbeitung 2. Zusammen...

Erläuterung des MySQL-Nicht-Null-Einschränkungsfalls

Inhaltsverzeichnis Legen Sie beim Erstellen einer...

Vor- und Nachteile gängiger MySQL-Speicher-Engines

Inhaltsverzeichnis Alle Speicher-Engines anzeigen...

So bringen Sie Ihren Browser dazu, mit JavaScript zu sprechen

Inhaltsverzeichnis 1. Das einfachste Beispiel 2. ...

So verwenden Sie die Debouce-Anti-Shake-Funktion in Vue

Inhaltsverzeichnis 1. Anti-Shake-Funktion 2. Verw...

So erstellen Sie eine LNMP-Umgebung unter Ubuntu 20.04

Einfache Beschreibung Da es zuvor mit Centos7 ers...

Einführung in die Linux-Dateikomprimierung und -Verpackung

1. Einführung in Komprimierung und Verpackung All...

Linux-Tutorial zum Ersetzen von Zeichenfolgen mit dem Befehl sed

Um eine Zeichenfolge zu ersetzen, müssen wir das ...