Pular para o conteúdo

sysbench - Benchmark de Sistema e Banco de Dados

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

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

Estrutura de Comando

sysbench [testname] [options] {prepare | run | cleanup}
FasePropósito
prepareCrie os dados/arquivos que o teste precisa
runExecute o benchmark
cleanupRemova os dados/arquivos de teste

Opções Globais Comuns

OpçãoDescrição
--threads=NNúmero de threads de trabalho
--time=NExecute por N segundos (0 = até eventos completos)
--events=NCap eventos totais
--rate=NAlvo eventos/sec (limitação de taxa)
--report-interval=NImprima stats intermediários a cada N segundos
--warmup-time=NAqueça antes de medir
--histogramMostre 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çãoDescrição
--cpu-max-prime=NLimite 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çãoDescrição
--memory-block-sizeTamanho de cada operação de memória
--memory-total-sizeDados totais a transferir
`—memory-oper=readwrite`
`—memory-access-mode=seqrnd`

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çãoDescrição
--file-total-sizeTamanho total dos arquivos de teste
--file-test-modeseqrd, seqwr, rndrd, rndwr, rndrw
--file-block-sizeTamanho de bloco de I/O
--file-fsync-freqFrequê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çãoDescrição
`—db-driver=mysqlpgsql`
--tables / --table-sizeForma do dataset
oltp_read_only / oltp_write_onlyVariantes de mix de carga
--db-ps-mode=disableDesabilite prepared statements

Métricas chave: transações/sec (TPS), consultas/sec (QPS), percentis de latência.

Lendo Resultados

MétricaSignificado
events/sThroughput da operação
latência (avg/95th)Tempo de resposta; observe o percentil 95º
TPS / QPSThroughput de transação/consulta de banco de dados
min/max/avgDistribuiçã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