Aller au contenu

sysbench - Benchmark système et base de données

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

PlateformeCommande
Debian/Ubuntusudo apt install sysbench
Fedora/RHELsudo dnf install sysbench
Arch Linuxsudo pacman -S sysbench
macOS (Homebrew)brew install sysbench
Depuis la sourceconstruire depuis le référentiel akopytov/sysbench
Vérifiersysbench --version

Structure de la commande

sysbench [testname] [options] {prepare | run | cleanup}
PhaseBut
prepareCréer les données/fichiers dont le test a besoin
runExécuter le benchmark
cleanupSupprimer les données/fichiers du test

Options globales courantes

OptionDescription
--threads=NNombre de threads de travail
--time=NExécuter pendant N secondes (0 = jusqu”à ce que les événements soient terminés)
--events=NPlafond des événements totaux
--rate=NÉvénements/sec cibles (limitation de débit)
--report-interval=NImprimer les stats intermédiaires tous les N secondes
--warmup-time=NÉchauffer avant de mesurer
--histogramAfficher 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
OptionDescription
--cpu-max-prime=NLimite 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
OptionDescription
--memory-block-sizeTaille de chaque opération de mémoire
--memory-total-sizeTotal de données à transférer
`—memory-oper=readwrite`
`—memory-access-mode=seqrnd`

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
OptionDescription
--file-total-sizeTaille totale des fichiers de test
--file-test-modeseqrd, seqwr, rndrd, rndwr, rndrw
--file-block-sizeTaille de bloc d”E/S
--file-fsync-freqFré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
OptionDescription
`—db-driver=mysqlpgsql`
--tables / --table-sizeForme d”ensemble de données
oltp_read_only / oltp_write_onlyVariantes du mélange de charge de travail
--db-ps-mode=disableDésactiver les instructions préparées

Mesures clés: transactions/sec (TPS), requêtes/sec (QPS), centiles de latence.

Lecture des résultats

MétriqueSignification
événements/sDébit de l”opération
latence (moy/95ème)Temps de réponse; regarder le 95ème centile
TPS / QPSDébit de transaction/requête de la base de données
min/max/moyDistribution 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