Sysbench : MariaDB, MySQL, PostgreSQL Benchmark Tool.
Sysbench ?
시스템 성능을 측정할 수 있는 툴로, MySQL에서 내부 프로젝트로 만들다가 Lua 스크립트를 적용한 0.5 버전까지 나왔다가 오랜기간 개발이 중지 되었습니다. 2016년에 다시 개발이 시작되었고 현재 1.0 버전대 개발이 진행중입니다. 기존에는 소스코드를 이용해 설치하는 방식으로 많이 사용하였지만, 현재는 yum 레포지토리를 이용해 설치가 가능합니다. 시스템 뿐만 아니라 MySQL, MariaDB, PostgreSQL에 대한 성능 평가가 가능합니다. 오라클의 경우 Swingbench를 많이 쓰고, MariaDB의 경우는 sysbench 나 DBT2(https://dev.mysql.com/downloads/benchmarks.html) 등을 사용할 수 있습니다.
Binary package 설치
curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bash sudo yum -y install sysbench
저는 늘 CentOS를 사용하기 때문에 해당 명령은 CentOS 기준입니다.
General Syntax
sysbench [options]... [testname] [command]
다음은 일반적인 테스트 명령과 그 목적에 대한 설명입니다.
- prepare: 테스트가 필요한 테스트에 대해 준비 조치를 수행합니다 (예 : fileio 테스트를 위해 필요한 파일을 디스크에 작성하거나 데이터베이스 벤치 마크를 위해 테스트 데이터베이스를 작성합니다.
- run : testname 인수로 지정된 실제 테스트를 실행합니다. 이 명령은 모든 테스트에서 제공됩니다.
- cleanup : 테스트를 생성 한 테스트에서 테스트 실행 후 임시 데이터를 제거합니다.
- help : testname 인수로 지정된 테스트의 사용법 정보를 표시합니다. 여기에는 테스트에서 제공하는 전체 명령 목록이 포함되므로 사용 가능한 명령을 얻는데 사용해야합니다.
Command Line Option
Option | Description | Default value |
–threads | 작업할 스레드의 수 | 1 |
–events | 총 요청 수에 대한 제한. 0(기본값)은 제한이 없음을 의미 | 0 |
–time | 총 실행 시간 제한(초). 0은 제한이 없음을 의미 |
10 |
–warmup-time | 벤치마킹을 실행 초기 시간을 통계에서 빼기 원할때 유용, 막 구동된 시스템을 벤치 마크할때 CPU / 데이터베이스 / 페이지 및 기타 캐시가 초기값에 가까울때 캐시를 채우고, 사용율을 예열 하는데 사용 |
0 |
–rate | 모든 스레드가 평균적으로 초당 수행해야하는 이벤트 (트랜잭션) 수를 지정합니다. 0 (기본값)은 무제한 비율을 의미 | 0 |
–thread-init-timeout | 작업자 스레드가 초기화 될 때까지의 대기 시간 (초) | 30 |
–thread-stack-size | 각 스레드의 스택 크기 | 32k |
–report-interval | 지정된 간격 (초)으로 중간 통계를 정기적으로보고합니다. 이 옵션으로 생성 된 통계는 누적이 아니라 간격 별. 0은 중간 보고서를 비활성화 | 0 |
–debug | 디버그 정보 출력 | off |
–validate | 가능한 경우 테스트 결과의 검증을 수행 | off |
–help | 일반 구문 또는 지정된 테스트에 대한 도움말을 출력 | off |
–verbosity | 세부 정보 수준 (0-중요한 메시지 만, 5-디버그) |
4 |
–percentile | sysbench는 처리 된 모든 요청의 실행 시간을 측정하여 최소, 평균 및 최대 실행 시간과 같은 통계 정보를 표시. 대부분의 벤치 마크에서 일부 백분위 수와 일치하는 요청 실행 시간 값을 아는 것이 유용 (예 : 95 % 백분위 수는 가장 긴 요청의 5 %를 삭제하고 나머지 요청에서 최대 값을 선택해야 함을 의미 함). 이 옵션을 사용하면 백분위 수의 쿼리 실행 시간을 계산할 수 있다. | 95 |
–luajit-cmd | LuaJIT 제어 명령을 수행. 이 옵션은 luajit -j와 동일. 자세한 내용은 LuaJIT 설명서를 참조 |
Random Number Option
sysbench는 주어진 확률 분포에 따라 분포 된 난수를 생성하는 여러 알고리즘을 제공합니다. 아래 표에는 해당 알고리즘을 제어하는데 사용할 수 있는 옵션이 나와 있습니다.
Option | Description | Default value |
–rand-type | 난수 분포 {uniform, gaussian, special, pareto, zipfian}은 기본적으로 사용. 벤치마크 스크립트는 기본 배포를 사용하거나 이를 명시적으로 지정 (즉, 기본값 재정의)하도록 선택 할 수 있다. | special |
–rand-seed | 난수 생성기 seed. 0이면 현재 시간이 RNG seed로 사용 | 0 |
–rand-spec-iter | 특수 분포에 대한 반복 횟수 | 12 |
–rand-spec-pct | 특별한 값이 특별 분포에 속하는 전체 범위의 백분율 | 1 |
–rand-spec-res | 특수 분포에 사용할 특수값의 백분율 | 75 |
–rand-pareto-h | shape parameter for the Pareto distribution | 0.2 |
–rand-zipfian-exp | shape parameter ((θ)theta) for the Zipfian distribution | 0.8 |
yum 으로 패키지를 설치하면 /usr/share/sysbench/ 경로 밑에 lua 스크립트가 생성되어 있습니다.
lua 스크립트를 이용해 원하는 벤치 마크를 실행 할 수 있습니다.
ex>
sysbench /usr/share/sysbench/oltp_read_only.lua --threads=16 --mysql-socket=/var/lib/mysql/mysql.sock --mysql-db=test --mysql-user=root --mysql-password=<password> --mysql-port=3306 --tables=10 --table-size=1000000 --time=30 prepare
sysbench /usr/share/sysbench/oltp_read_only.lua --threads=16 --events=0 --time=300 --mysql-socket=/var/lib/mysql/mysql.sock --mysql-db=test --mysql-user=root --mysql-password=<password> --mysql-port=3306 --tables=10 --table-size=1000000 --range_selects=off --db-ps-mode=disable --report-interval=1 cleanup
1 Response
[…] 설치 및 사용법은 여기 (sysbench)를 […]