sysbench - 시스템 & 데이터베이스 벤치마크 치트시트
sysbench는 LuaJIT 기반 스크립팅 가능한 다중 스레드 벤치마크 도구입니다. 데이터베이스 벤치마킹(특히 MySQL 및 PostgreSQL via OLTP 워크로드)으로 가장 유명하지만 CPU, 메모리, 파일 I/O, 스레드, 뮤텍스용 기본 제공 테스트도 제공합니다. 워크로드가 매개변수화되고 스크립팅 가능하므로 용량 계획, 튜닝, 전후 비교를 위한 재현 가능한 숫자를 생성합니다.
설치
| 플랫폼 | 명령어 |
|---|
| Debian/Ubuntu | sudo apt install sysbench |
| Fedora/RHEL | sudo dnf install sysbench |
| Arch Linux | sudo pacman -S sysbench |
| macOS (Homebrew) | brew install sysbench |
| 소스에서 | akopytov/sysbench repo에서 빌드 |
| 확인 | sysbench --version |
명령 구조
sysbench [testname] [options] {prepare | run | cleanup}
| 단계 | 목적 |
|---|
prepare | 테스트에 필요한 데이터/파일 생성 |
run | 벤치마크 실행 |
cleanup | 테스트 데이터/파일 제거 |
일반적인 전역 옵션
| 옵션 | 설명 |
|---|
--threads=N | 워커 스레드 수 |
--time=N | N 초 동안 실행 (0 = 이벤트 완료까지) |
--events=N | 총 이벤트 상한 |
--rate=N | 대상 이벤트/초 (속도 제한) |
--report-interval=N | 매 N 초마다 중간 통계 인쇄 |
--warmup-time=N | 측정 전 워밍업 |
--histogram | 지연 시간 히스토그램 표시 |
CPU 벤치마크
# 4 스레드에서 20000까지 소수 확인, 30초 동안
sysbench cpu --cpu-max-prime=20000 --threads=4 --time=30 run
| 옵션 | 설명 |
|---|
--cpu-max-prime=N | 소수 계산의 상한 (작업 크기) |
주요 메트릭: events per second (높을수록 좋음).
메모리 벤치마크
sysbench memory --memory-block-size=1K --memory-total-size=100G \
--memory-oper=write --threads=4 run
| 옵션 | 설명 |
|---|
--memory-block-size | 각 메모리 작업 크기 |
--memory-total-size | 전송할 총 데이터 |
| `—memory-oper=read | write` |
| `—memory-access-mode=seq | rnd` |
주요 메트릭: MiB/sec 전송 속도.
파일 I/O 벤치마크
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
| 옵션 | 설명 |
|---|
--file-total-size | 테스트 파일의 총 크기 |
--file-test-mode | seqrd, seqwr, rndrd, rndwr, rndrw |
--file-block-size | I/O 블록 크기 |
--file-fsync-freq | fsync 빈도 |
주요 메트릭: IOPS, throughput (MiB/s), latency.
스레드 & 뮤텍스
sysbench threads --threads=64 --thread-yields=1000 --time=30 run
sysbench mutex --threads=64 --mutex-num=4096 run
데이터베이스 (OLTP) 벤치마크
sysbench는 Lua OLTP 스크립트(oltp_read_write, oltp_read_only, oltp_point_select 등)를 제공합니다.
# MySQL 데이터베이스에 10개 테이블의 1,000,000 행 준비
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
# 16 스레드로 5분간 혼합 읽기/쓰기 테스트 실행
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
# 정리
sysbench oltp_read_write --db-driver=mysql --mysql-db=benchdb cleanup
| 옵션 | 설명 |
|---|
| `—db-driver=mysql | pgsql` |
--tables / --table-size | 데이터셋 모양 |
oltp_read_only / oltp_write_only | 워크로드 믹스 변형 |
--db-ps-mode=disable | prepared statement 비활성화 |
주요 메트릭: transactions/sec (TPS), queries/sec (QPS), latency percentiles.
결과 읽기
| 메트릭 | 의미 |
|---|
| events/s | 작업 처리량 |
| latency (avg/95th) | 응답 시간; 95백분위수 주시 |
| TPS / QPS | 데이터베이스 트랜잭션/쿼리 처리량 |
| min/max/avg | 이벤트별 타이밍 분포 |
일반적인 워크플로우
# governor 변경 전/후 CPU 비교
sysbench cpu --cpu-max-prime=20000 --threads=$(nproc) --time=30 run
# 새 디스크의 스토리지 건전성 검사
sysbench fileio --file-total-size=8G --file-test-mode=rndrw --time=60 run
# MySQL 튜닝: --threads를 변경하고 TPS/지연시간 확장 관찰
리소스