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
| Plataforma | Comando |
|---|
| Debian/Ubuntu | sudo apt install sysbench |
| Fedora/RHEL | sudo dnf install sysbench |
| Arch Linux | sudo pacman -S sysbench |
| macOS (Homebrew) | brew install sysbench |
| Desde fuente | construye del repo akopytov/sysbench |
| Verificar | sysbench --version |
Estructura de Comando
sysbench [testname] [options] {prepare | run | cleanup}
| Fase | Propósito |
|---|
prepare | Crea los datos/archivos que la prueba necesita |
run | Ejecuta el benchmark |
cleanup | Elimina los datos/archivos de la prueba |
Opciones Globales Comunes
| Opción | Descripción |
|---|
--threads=N | Número de threads de trabajo |
--time=N | Ejecuta durante N segundos (0 = hasta que se completen eventos) |
--events=N | Limita eventos totales |
--rate=N | Eventos/seg objetivo (limitación de tasa) |
--report-interval=N | Imprime estadísticas intermedias cada N segundos |
--warmup-time=N | Calienta antes de medir |
--histogram | Muestra 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ón | Descripción |
|---|
--cpu-max-prime=N | Lí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ón | Descripción |
|---|
--memory-block-size | Tamaño de cada operación de memoria |
--memory-total-size | Datos totales a transferir |
--memory-oper=read|write | Tipo de operación |
--memory-access-mode=seq|rnd | Patró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ón | Descripción |
|---|
--file-total-size | Tamaño total de archivos de prueba |
--file-test-mode | seqrd, seqwr, rndrd, rndwr, rndrw |
--file-block-size | Tamaño de bloque I/O |
--file-fsync-freq | Frecuencia 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ón | Descripción |
|---|
--db-driver=mysql|pgsql | Base de datos objetivo |
--tables / --table-size | Forma del conjunto de datos |
oltp_read_only / oltp_write_only | Variantes de mezcla de carga de trabajo |
--db-ps-mode=disable | Desactiva declaraciones preparadas |
Métricas clave: transacciones/seg (TPS), consultas/seg (QPS), percentiles de latencia.
Leyenda de Resultados
| Métrica | Significado |
|---|
| events/s | Throughput de la operación |
| latency (avg/95th) | Tiempo de respuesta; observa el percentil 95 |
| TPS / QPS | Throughput de transacción/consulta de base de datos |
| min/max/avg | Distribució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