sysbench - Benchmark système et base de données
sysbench est un outil de benchmark scriptable et multi-thread basé sur LuaJIT. Il est surtout célèbre pour le benchmark des bases de données (en particulier MySQL et PostgreSQL via les charges de travail OLTP) mais est également livré avec des tests intégrés pour le CPU, la mémoire, les E/S fichiers, les threads et les mutex. Parce que les charges de travail sont paramétrées et scriptables, elle produit des nombres reproductibles pour la planification de la capacité, l”optimisation et les comparaisons avant/après.
Installation
| Plateforme | Commande |
|---|
| Debian/Ubuntu | sudo apt install sysbench |
| Fedora/RHEL | sudo dnf install sysbench |
| Arch Linux | sudo pacman -S sysbench |
| macOS (Homebrew) | brew install sysbench |
| Depuis la source | construire depuis le référentiel akopytov/sysbench |
| Vérifier | sysbench --version |
Structure de la commande
sysbench [testname] [options] {prepare | run | cleanup}
| Phase | But |
|---|
prepare | Créer les données/fichiers dont le test a besoin |
run | Exécuter le benchmark |
cleanup | Supprimer les données/fichiers du test |
Options globales courantes
| Option | Description |
|---|
--threads=N | Nombre de threads de travail |
--time=N | Exécuter pendant N secondes (0 = jusqu”à ce que les événements soient terminés) |
--events=N | Plafond des événements totaux |
--rate=N | Événements/sec cibles (limitation de débit) |
--report-interval=N | Imprimer les stats intermédiaires tous les N secondes |
--warmup-time=N | Échauffer avant de mesurer |
--histogram | Afficher un histogramme de latence |
Benchmark CPU
# Vérifier les nombres premiers jusqu''à 20000 sur 4 threads pendant 30s
sysbench cpu --cpu-max-prime=20000 --threads=4 --time=30 run
| Option | Description |
|---|
--cpu-max-prime=N | Limite supérieure pour le calcul de nombre premier (taille de travail) |
Mesure clé: événements par seconde (plus haut est meilleur).
Benchmark mémoire
sysbench memory --memory-block-size=1K --memory-total-size=100G \
--memory-oper=write --threads=4 run
| Option | Description |
|---|
--memory-block-size | Taille de chaque opération de mémoire |
--memory-total-size | Total de données à transférer |
| `—memory-oper=read | write` |
| `—memory-access-mode=seq | rnd` |
Mesure clé: débit MiB/sec de transfert.
Benchmark E/S fichiers
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 | Description |
|---|
--file-total-size | Taille totale des fichiers de test |
--file-test-mode | seqrd, seqwr, rndrd, rndwr, rndrw |
--file-block-size | Taille de bloc d”E/S |
--file-fsync-freq | Fréquence de fsync |
Mesures clés: IOPS, débit (MiB/s), latence.
Threads et Mutex
sysbench threads --threads=64 --thread-yields=1000 --time=30 run
sysbench mutex --threads=64 --mutex-num=4096 run
Benchmark de base de données (OLTP)
sysbench est livré avec des scripts Lua OLTP (oltp_read_write, oltp_read_only, oltp_point_select, etc.).
# Préparer 10 tableaux de 1 000 000 de lignes dans une base de données MySQL
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
# Exécuter un test de lecture/écriture mixte de 5 minutes avec 16 threads
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
# Nettoyer
sysbench oltp_read_write --db-driver=mysql --mysql-db=benchdb cleanup
| Option | Description |
|---|
| `—db-driver=mysql | pgsql` |
--tables / --table-size | Forme d”ensemble de données |
oltp_read_only / oltp_write_only | Variantes du mélange de charge de travail |
--db-ps-mode=disable | Désactiver les instructions préparées |
Mesures clés: transactions/sec (TPS), requêtes/sec (QPS), centiles de latence.
Lecture des résultats
| Métrique | Signification |
|---|
| événements/s | Débit de l”opération |
| latence (moy/95ème) | Temps de réponse; regarder le 95ème centile |
| TPS / QPS | Débit de transaction/requête de la base de données |
| min/max/moy | Distribution de la synchronisation par événement |
Flux de travail courants
# Comparer le CPU avant/après un changement de gouverneur
sysbench cpu --cpu-max-prime=20000 --threads=$(nproc) --time=30 run
# Vérification de santé du stockage sur un nouveau disque
sysbench fileio --file-total-size=8G --file-test-mode=rndrw --time=60 run
# Affiner MySQL: varier --threads et regarder l''échelle TPS/latence
Ressources