Ir al contenido

sysbench - Benchmark de Sistema y Base de Datos

sysbench - Benchmark de Sistema y Base de Datos

sysbench es una herramienta de benchmark scriptable y multi-thread basada en LuaJIT. Es más famosa por benchmarking de base de datos (especialmente MySQL y PostgreSQL vía cargas de trabajo OLTP) pero también incluye pruebas integradas para CPU, memoria, I/O de archivo, threads y mutexes. Porque las cargas de trabajo son parametrizadas y scriptables, produce números reproducibles para planificación de capacidad, sintonización y comparaciones antes/después.

Instalación

PlataformaComando
Debian/Ubuntusudo apt install sysbench
Fedora/RHELsudo dnf install sysbench
Arch Linuxsudo pacman -S sysbench
macOS (Homebrew)brew install sysbench
Desde fuenteconstruye del repo akopytov/sysbench
Verificarsysbench --version

Estructura de Comando

sysbench [testname] [options] {prepare | run | cleanup}
FasePropósito
prepareCrea los datos/archivos que la prueba necesita
runEjecuta el benchmark
cleanupElimina los datos/archivos de la prueba

Opciones Globales Comunes

OpciónDescripción
--threads=NNúmero de threads de trabajo
--time=NEjecuta durante N segundos (0 = hasta que se completen eventos)
--events=NLimita eventos totales
--rate=NEventos/seg objetivo (limitación de tasa)
--report-interval=NImprime estadísticas intermedias cada N segundos
--warmup-time=NCalienta antes de medir
--histogramMuestra un histograma de latencia

Benchmark de CPU

# Verifica primos hasta 20000 en 4 threads durante 30s
sysbench cpu --cpu-max-prime=20000 --threads=4 --time=30 run
OpciónDescripción
--cpu-max-prime=NLímite superior para cálculo de primos (tamaño de trabajo)

Métrica clave: eventos por segundo (más es mejor).

Benchmark de Memoria

sysbench memory --memory-block-size=1K --memory-total-size=100G \
  --memory-oper=write --threads=4 run
OpciónDescripción
--memory-block-sizeTamaño de cada operación de memoria
--memory-total-sizeDatos totales a transferir
--memory-oper=read|writeTipo de operación
--memory-access-mode=seq|rndPatrón de acceso

Métrica clave: MiB/seg tasa de transferencia.

Benchmark de I/O de Archivo

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
OpciónDescripción
--file-total-sizeTamaño total de archivos de prueba
--file-test-modeseqrd, seqwr, rndrd, rndwr, rndrw
--file-block-sizeTamaño de bloque I/O
--file-fsync-freqFrecuencia de fsync

Métricas clave: IOPS, throughput (MiB/s), latency.

Threads y Mutex

sysbench threads --threads=64 --thread-yields=1000 --time=30 run
sysbench mutex --threads=64 --mutex-num=4096 run

Benchmark de Base de Datos (OLTP)

sysbench incluye scripts Lua OLTP (oltp_read_write, oltp_read_only, oltp_point_select, etc.).

# Prepara 10 tablas de 1,000,000 filas en una base de datos 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

# Ejecuta una prueba de lectura/escritura mixta de 5 minutos con 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

# Limpia
sysbench oltp_read_write --db-driver=mysql --mysql-db=benchdb cleanup
OpciónDescripción
--db-driver=mysql|pgsqlBase de datos objetivo
--tables / --table-sizeForma del conjunto de datos
oltp_read_only / oltp_write_onlyVariantes de mezcla de carga de trabajo
--db-ps-mode=disableDesactiva declaraciones preparadas

Métricas clave: transacciones/seg (TPS), consultas/seg (QPS), percentiles de latencia.

Leyenda de Resultados

MétricaSignificado
events/sThroughput de la operación
latency (avg/95th)Tiempo de respuesta; observa el percentil 95
TPS / QPSThroughput de transacción/consulta de base de datos
min/max/avgDistribución de timing por evento

Flujos de Trabajo Comunes

# Compara CPU antes/después de un cambio de gobernador
sysbench cpu --cpu-max-prime=20000 --threads=$(nproc) --time=30 run

# Verificación de cordura de almacenamiento en un disco nuevo
sysbench fileio --file-total-size=8G --file-test-mode=rndrw --time=60 run

# Sintoniza MySQL: varía --threads y observa escala de TPS/latencia

Recursos