sysbench - System & Database Benchmark Spickzettel
sysbench ist ein skriptfähiges, Multi-Thread Benchmark-Tool basierend auf LuaJIT. Es ist vor allem berühmt für Database Benchmarking (besonders MySQL und PostgreSQL via OLTP Workloads) aber versendet auch eingebaute Tests für CPU, Memory, File I/O, Threads und Mutexe. Weil Workloads parametriert und skriptfähig sind, produziert es wiederholbare Zahlen für Kapazitäts-Planung, Tuning und Vor/Nach Vergleiche.
Installation
| Plattform | Befehl |
|---|
| Debian/Ubuntu | sudo apt install sysbench |
| Fedora/RHEL | sudo dnf install sysbench |
| Arch Linux | sudo pacman -S sysbench |
| macOS (Homebrew) | brew install sysbench |
| Aus Quelle | Aus dem akopytov/sysbench Repo bauen |
| Überprüfung | sysbench --version |
Befehlsstruktur
sysbench [testname] [options] {prepare | run | cleanup}
| Phase | Zweck |
|---|
prepare | Die Daten/Dateien erstellen die der Test benötigt |
run | Benchmark ausführen |
cleanup | Test Daten/Dateien entfernen |
Häufige Globale Optionen
| Option | Beschreibung |
|---|
--threads=N | Anzahl Worker-Threads |
--time=N | N Sekunden laufen (0 = bis Events erledigt) |
--events=N | Gesamte Events limitieren |
--rate=N | Ziel Events/Sek (Rate Limiting) |
--report-interval=N | Alle N Sekunden Zwischen-Stats ausgeben |
--warmup-time=N | Vor Messung aufwärmen |
--histogram | Latentz-Histogramm anzeigen |
CPU Benchmark
# Primes bis 20000 überprüfen über 4 Threads für 30s
sysbench cpu --cpu-max-prime=20000 --threads=4 --time=30 run
| Option | Beschreibung |
|---|
--cpu-max-prime=N | Obere Grenze für Prime-Berechnung (Arbeitsgröße) |
Schlüssel-Metrik: Events pro Sekunde (höher ist besser).
Memory Benchmark
sysbench memory --memory-block-size=1K --memory-total-size=100G \
--memory-oper=write --threads=4 run
| Option | Beschreibung |
|---|
--memory-block-size | Größe jedes Memory-Vorgangs |
--memory-total-size | Gesamtdaten zum Transferieren |
| `—memory-oper=read | write` |
| `—memory-access-mode=seq | rnd` |
Schlüssel-Metrik: MiB/sek Transfer-Rate.
File I/O Benchmark
sysbench fileio --file-total-size=4G prepare
sysbench fileio --file-total-size=4G --file-test-mode=rndrw \
--time=60 --threads=8 run
sysbench fileio --file-total-size=4G cleanup
| Option | Beschreibung |
|---|
--file-total-size | Gesamtgröße der Test-Dateien |
--file-test-mode | seqrd, seqwr, rndrd, rndwr, rndrw |
--file-block-size | I/O Block-Größe |
--file-fsync-freq | fsync Häufigkeit |
Schlüssel-Metriken: IOPS, Durchsatz (MiB/s), Latenz.
Threads & Mutex
sysbench threads --threads=64 --thread-yields=1000 --time=30 run
sysbench mutex --threads=64 --mutex-num=4096 run
Database (OLTP) Benchmark
sysbench versendet Lua OLTP Scripts (oltp_read_write, oltp_read_only, oltp_point_select, etc.).
# 10 Tabellen von 1,000,000 Zeilen in einer MySQL Datenbank vorbereiten
sysbench oltp_read_write \
--db-driver=mysql --mysql-host=127.0.0.1 --mysql-user=bench \
--mysql-password=secret --mysql-db=benchdb \
--tables=10 --table-size=1000000 prepare
# Einen 5-Minuten gemischten Lese/Schreib-Test mit 16 Threads ausführen
sysbench oltp_read_write \
--db-driver=mysql --mysql-host=127.0.0.1 --mysql-user=bench \
--mysql-password=secret --mysql-db=benchdb \
--tables=10 --table-size=1000000 --threads=16 --time=300 \
--report-interval=10 run
# Aufräumen
sysbench oltp_read_write --db-driver=mysql --mysql-db=benchdb cleanup
| Option | Beschreibung |
|---|
| `—db-driver=mysql | pgsql` |
--tables / --table-size | Datensatz-Form |
oltp_read_only / oltp_write_only | Workload-Mix Varianten |
--db-ps-mode=disable | Prepared Statements deaktivieren |
Schlüssel-Metriken: Transactions/Sek (TPS), Queries/Sek (QPS), Latenz Perzentile.
Ergebnisse lesen
| Metrik | Bedeutung |
|---|
| Events/Sek | Durchsatz des Vorgangs |
| Latenz (Avg/95th) | Response-Zeit; beobachte das 95. Perzentil |
| TPS / QPS | Database Transaktions/Abfrage-Durchsatz |
| Min/Max/Avg | Verteilung pro-Event Timing |
Häufige Workflows
# CPU vor/nach einer Governor-Änderung vergleichen
sysbench cpu --cpu-max-prime=20000 --threads=$(nproc) --time=30 run
# Storage Sanity-Check auf einer neuen Festplatte
sysbench fileio --file-total-size=8G --file-test-mode=rndrw --time=60 run
# MySQL tunen: --threads variieren und TPS/Latenz-Skalierung beobachten
Ressourcen