sysbench - Benchmark de Sistema e Banco de Dados
sysbench é uma ferramenta de benchmark programável e multi-thread baseada em LuaJIT. É mais famosa por benchmarking de banco de dados (especialmente MySQL e PostgreSQL via cargas de trabalho OLTP), mas também vem com testes construídos para CPU, memória, I/O de arquivo, threads e mutexes. Como cargas de trabalho são parametrizadas e programáveis, produz números reproduzíveis para planejamento de capacidade, tuning e comparações antes/depois.
Instalação
| 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 |
| From source | build do repo akopytov/sysbench |
| Verificar | sysbench --version |
Estrutura de Comando
sysbench [testname] [options] {prepare | run | cleanup}
| Fase | Propósito |
|---|
prepare | Crie os dados/arquivos que o teste precisa |
run | Execute o benchmark |
cleanup | Remova os dados/arquivos de teste |
Opções Globais Comuns
| Opção | Descrição |
|---|
--threads=N | Número de threads de trabalho |
--time=N | Execute por N segundos (0 = até eventos completos) |
--events=N | Cap eventos totais |
--rate=N | Alvo eventos/sec (limitação de taxa) |
--report-interval=N | Imprima stats intermediários a cada N segundos |
--warmup-time=N | Aqueça antes de medir |
--histogram | Mostre um histograma de latência |
Benchmark de CPU
# Verifique primos até 20000 entre 4 threads por 30s
sysbench cpu --cpu-max-prime=20000 --threads=4 --time=30 run
| Opção | Descrição |
|---|
--cpu-max-prime=N | Limite superior para cálculo de primo (tamanho de trabalho) |
Métrica chave: eventos por segundo (maior é melhor).
Benchmark de Memória
sysbench memory --memory-block-size=1K --memory-total-size=100G \
--memory-oper=write --threads=4 run
| Opção | Descrição |
|---|
--memory-block-size | Tamanho de cada operação de memória |
--memory-total-size | Dados totais a transferir |
| `—memory-oper=read | write` |
| `—memory-access-mode=seq | rnd` |
Métrica chave: MiB/sec taxa de transferência.
Benchmark de I/O de Arquivo
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
| Opção | Descrição |
|---|
--file-total-size | Tamanho total dos arquivos de teste |
--file-test-mode | seqrd, seqwr, rndrd, rndwr, rndrw |
--file-block-size | Tamanho de bloco de I/O |
--file-fsync-freq | Frequência fsync |
Métricas chave: IOPS, throughput (MiB/s), latência.
Threads e Mutex
sysbench threads --threads=64 --thread-yields=1000 --time=30 run
sysbench mutex --threads=64 --mutex-num=4096 run
Benchmark de Banco de Dados (OLTP)
sysbench vem com scripts Lua OLTP (oltp_read_write, oltp_read_only, oltp_point_select, etc.).
# Prepare 10 tabelas de 1.000.000 de linhas em banco de dados 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
# Execute teste de leitura/escrita misto de 5 minutos com 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
# Limpe
sysbench oltp_read_write --db-driver=mysql --mysql-db=benchdb cleanup
| Opção | Descrição |
|---|
| `—db-driver=mysql | pgsql` |
--tables / --table-size | Forma do dataset |
oltp_read_only / oltp_write_only | Variantes de mix de carga |
--db-ps-mode=disable | Desabilite prepared statements |
Métricas chave: transações/sec (TPS), consultas/sec (QPS), percentis de latência.
Lendo Resultados
| Métrica | Significado |
|---|
| events/s | Throughput da operação |
| latência (avg/95th) | Tempo de resposta; observe o percentil 95º |
| TPS / QPS | Throughput de transação/consulta de banco de dados |
| min/max/avg | Distribuição de timing por evento |
Fluxos de Trabalho Comuns
# Compare CPU antes/depois de uma mudança de governor
sysbench cpu --cpu-max-prime=20000 --threads=$(nproc) --time=30 run
# Verificação de sanidade de armazenamento em novo disco
sysbench fileio --file-total-size=8G --file-test-mode=rndrw --time=60 run
# Tune MySQL: varie --threads e observe TPS/latência escalar
Recursos