Como usar o sysbench: benchmarks de CPU, disco e MySQL
7 min de leitura
O sysbench é uma ferramenta de benchmark open source e multithread, construída sobre LuaJIT, que traz testes de CPU, memória, E/S de arquivos, threads e mutex, além de scripts OLTP para MySQL e PostgreSQL. Os testes que precisam de dados seguem o mesmo ciclo: prepare cria os arquivos ou as tabelas de teste, run executa o benchmark por um tempo ou número de eventos definido, e cleanup apaga os dados; os testes de CPU e memória só precisam de run. Ele mede uma única máquina ou um único servidor de banco de dados, então não diz como a sua aplicação se comporta com tráfego real de usuários.
Não rodamos o sysbench para este guia. Os fatos vêm do README e do código-fonte no branch master do GitHub, conferidos em 31 de outubro de 2026, e as recomendações são nossas.
| Tema | sysbench |
|---|---|
| Licença | GPLv2 |
| Escrito em | C, com LuaJIT para os scripts |
| Última versão | 1.0.20 (24 de abril de 2020) |
| Último commit | 9 de março de 2025 |
| Testes embutidos | cpu, memory, fileio, threads, mutex |
| Scripts de banco de dados | Oito scripts oltp_*, bulk_insert, dois select_random_* |
| Drivers de banco de dados | MySQL (padrão), PostgreSQL |
| Plataformas | Linux, macOS; Windows via WSL |
O sysbench ainda é mantido?
Pouco. A última versão, 1.0.20, saiu em abril de 2020; desde então o branch master recebeu commits ocasionais, nenhum deles lançado numa versão, o mais recente em março de 2025.
A versão 1.0.20 tem data de 24 de abril de 2020. O histórico de commits mostra mudanças como uma distribuição uniforme por padrão para --rand-type (2020), um LuaJIT do upstream (2023) e suporte às bibliotecas cliente do MariaDB (2023), depois quatro commits de build em 9 de março de 2025 (conferido em 31 de outubro de 2026). Os repositórios de pacotes citados no README são atualizados a cada versão, então essas mudanças exigem um build a partir do código-fonte.
Como funciona uma execução do sysbench?
Você informa um teste e um comando: sysbench [options] [testname] [command]. O teste é um dos embutidos, um script Lua incluído ou o seu próprio script, e o comando costuma ser prepare, run, cleanup ou help.
Segundo o README, prepare cria os arquivos do fileio ou preenche o banco para os scripts OLTP, cleanup apaga esses dados e sysbench <testname> help lista as opções de um teste. Um teste de disco:
sysbench fileio --file-total-size=8G prepare
sysbench fileio --file-total-size=8G \
--file-test-mode=rndrw --time=300 run
sysbench fileio --file-total-size=8G cleanup
O código do fileio lista os modos seqwr, seqrewr, seqrd, rndrd, rndwr e rndrw, com 2 GB de arquivos por padrão. Arquivos que cabem na memória podem ser servidos pelo cache de páginas, então use um total maior que a RAM quando quiser medir o disco.
Como medir CPU e memória com o sysbench?
Com sysbench cpu run e sysbench memory run. O teste de CPU informa eventos por segundo, em que um evento verifica se cada número até um limite é primo, e o teste de memória informa operações e MiB transferidos por segundo.
sysbench cpu --cpu-max-prime=20000 \
--threads=4 --time=60 run
O teste de CPU usa --cpu-max-prime igual a 10000 por padrão, e o teste de memória aceita tamanho de bloco, tamanho total, operações de leitura ou escrita e acesso sequencial ou aleatório (conferido em 31 de outubro de 2026). Compare só execuções com configurações idênticas.
Como testar MySQL ou PostgreSQL com o sysbench?
Escolha um dos scripts OLTP incluídos, preencha as tabelas com prepare, rode transações a partir de várias threads com run e depois apague as tabelas com cleanup. O MySQL é o driver padrão; o PostgreSQL exige --db-driver=pgsql e um build com suporte a PostgreSQL.
sysbench oltp_read_write --mysql-host=10.0.0.5 \
--mysql-user=sbtest --mysql-password=secret \
--tables=10 --table-size=1000000 prepare
sysbench oltp_read_write --mysql-host=10.0.0.5 \
--mysql-user=sbtest --mysql-password=secret \
--tables=10 --table-size=1000000 \
--threads=16 --time=300 --report-interval=10 run
O script OLTP comum cria uma tabela de 10.000 linhas se você não passar --tables e --table-size. No oltp_read_write, cada transação roda 10 consultas por chave, quatro consultas por intervalo, dois updates e um delete seguido de um insert, entre BEGIN e COMMIT (conferido em 31 de outubro de 2026). Use mais dados que o buffer pool do servidor se quiser leituras de disco no resultado.
Quais opções do sysbench importam mais?
--threads e --time definem o tamanho e a duração de uma execução, --rate define uma taxa-alvo de eventos, e --report-interval, --percentile e --histogram decidem o que você vê.
--threads: threads de trabalho, 1 por padrão.--time: segundos, 10 por padrão, 0 para sem limite.--eventslimita o número de eventos, e os dois limites valem, então combine com--time=0.--warmup-time: roda primeiro sem estatísticas, para que caches frios não distorçam o resultado. Só no branch master: a versão 1.0.20 não tem essa opção.--rate: média de eventos por segundo somando todas as threads; 0, o padrão, significa o mais rápido possível.--report-interval: números por intervalo a cada N segundos, para mostrar travamentos.--percentile: o percentil de latência exibido, 95 por padrão.--histogram: um histograma de latência no fim, definido em sb_logger.c.
O sysbench usa um modelo de carga fechado ou aberto?
Fechado por padrão: um número fixo de threads dispara o próximo evento assim que o anterior termina, então um servidor lento recebe menos eventos. Com --rate, os eventos chegam no próprio ritmo, o que fica mais perto de um modelo de carga aberto.
Nosso artigo sobre o modelo de carga aberto vs fechado explica por que isso muda o que um benchmark mede. No modo padrão, um travamento também atrasa os eventos que teriam começado durante ele, e esses atrasos nunca chegam às latências: é a coordinated omission. O arquivo-fonte principal mostra que --rate põe os eventos numa fila em intervalos com distribuição exponencial, soma à latência de cada evento o tempo que ele esperou na fila e para com o erro “event queue is full” quando as threads não dão conta (conferido em 31 de outubro de 2026).
Como ler a saída do sysbench?
Comece pela vazão: eventos por segundo, ou transações e consultas por segundo nos scripts OLTP. Depois leia o bloco de latência em milissegundos: mínimo, média, máximo, o percentil escolhido (p95 por padrão) e a soma.
A versão 1.0.20 mostra, no lugar de “Throughput”, um bloco “General statistics” com o tempo total e o número total de eventos. Os nomes dos campos vêm do código do relatório de banco de dados e do arquivo-fonte principal no master, aqui sem valores:
SQL statistics:
queries performed: read, write, other, total
transactions, queries (N per sec.)
ignored errors, reconnects (N per sec.)
Throughput:
events/s (eps), time elapsed, total number of events
Latency (ms):
min, avg, max, 95th percentile, sum
Threads fairness:
events, execution time (avg/stddev)
Um percentil 95 deixa de fora o evento mais lento de cada vinte. Use --percentile=99 ou acrescente --histogram quando a cauda importa; nosso guia de latência de cauda explica por quê.
Quando o sysbench é a ferramenta errada?
Quando a sua pergunta é sobre a sua aplicação. Uma pontuação de CPU mostra a rapidez com que uma máquina verifica números primos, e uma execução OLTP mede o servidor de banco de dados com as tabelas e consultas do sysbench, sem o seu schema, o seu pool de conexões ou o caminho de rede.
- Escolha o pgbench para testes nativos de PostgreSQL: a documentação do PostgreSQL descreve um cenário padrão vagamente baseado no TPC-B, além de arquivos de script próprios (conferido em 31 de outubro de 2026).
- Escolha o HammerDB para testes no estilo TPC-C: a documentação dele cobre a carga TPROC-C, derivada do TPC-C, para SQL Server, Db2, Oracle, PostgreSQL, MariaDB e MySQL (conferido em 31 de outubro de 2026).
- Escolha o JMeter com o sampler JDBC Request para misturar SQL e HTTP num mesmo plano de teste; o guia de planos de teste de banco de dados diz que o
.jardo driver vai na pastalibdo JMeter.
A LoadFocus, que publica este site, não roda o sysbench e não consegue se conectar sozinha a MySQL ou PostgreSQL. Ela roda planos de teste JMeter e scripts k6 a partir de 25 regiões na nuvem contra a camada web ou de API que fica na frente do banco. Uma combinação útil: uma execução do sysbench para dimensionar o servidor de banco de dados e depois um teste de carga da aplicação para ver se as requisições reais chegam a esse limite.
FAQ
O sysbench ainda é mantido? Pouco. A última versão é a 1.0.20, de 24 de abril de 2020. O branch master recebeu desde então commits ocasionais, nenhum deles numa versão, o mais recente em 9 de março de 2025.
O que significa o percentil 95 na saída do sysbench?
É a latência, em milissegundos, dentro da qual 95% dos eventos terminaram. 95 é o valor padrão da opção --percentile, e você pode definir outro, como 99.
O sysbench consegue fazer benchmark do PostgreSQL?
Sim. Os scripts OLTP incluídos rodam contra o PostgreSQL com --db-driver=pgsql quando o sysbench foi compilado com suporte a PostgreSQL.
A LoadFocus consegue rodar o sysbench? Não. A LoadFocus roda planos de teste JMeter e scripts k6 contra sites e APIs a partir de 25 regiões na nuvem, e não se conecta diretamente a MySQL ou PostgreSQL.
Leituras relacionadas
- Modelo de carga aberto vs fechado: qual usar e quando
- Coordinated omission: o que é e como evitar
- Latência de cauda: o que é e como medir
- Ferramentas de benchmark HTTP: wrk, hey, oha, ab e mais
- Vazão vs latência: como se relacionam sob carga
- pgbench: benchmark e teste de carga do PostgreSQL
- YCSB: cargas de trabalho A-F, execução e limites
- redis-benchmark: como usar e ler os resultados
- TPC-H: o que o benchmark mede e como executá-lo
As afirmações técnicas deste artigo não foram revisadas de forma independente.