Sysbench - MySQL 성능 측정 툴(Mysql 벤치마크)

Last Updated on 2월 15, 2021 by 태랑(정현호)

Sysbench - Mysql 성능 벤치마크 툴


Sysbench는 LUA 스크립트를 이용하고 multi-thread 방식을 지원하는 벤치마크 툴 입니다
MySQL/MariaDB 데이터베이스에서 주로 사용하는 오픈 소스 벤치마킹 프로그램 이며
추가적으로 CPU에서 디스크 I/O, 메모리 성능 등의 시스템 테스트를 할 수 있습니다.
또한 PostgreSQL에서 벤치마킹을 지원 합니다.

사이트 링크
https://github.com/akopytov/sysbench



Sysbench Install

# 사전 패키지 설치
[root]# yum -y install git make automake libtool pkgconfig libaio-devel

# GitHub 에서 다운받은 후 컴파일 설치
[root]# git clone https://github.com/akopytov/sysbench.git
[root]# cd sysbench

[root]# ./autogen.sh
[root]# ./configure --prefix=/usr/local/sysbench \
--with-mysql-includes=/usr/local/mysql/include \
--with-mysql-libs=/usr/local/mysql/lib

  * mysql은 사전에 Source Compile 형태로 설치되어 있는 상태 입니다.
  * --with-mysql-includes 과 --with-mysql-libs 를 넣어줍니다.
  * 저는 /usr/local/sysbench 위치에 설치 하도록 하겠습니다.

[root]# make -j
[root]# make install


[root]# cd /usr/local/sysbench/bin/
[root]# ./sysbench --version
sysbench 1.1.0-bbee5d5


.bash_profile 내에 PATH 를 추가 합니다.
export PATH=$PATH:/usr/local/sysbench/bin

source .bash_profile



Sysbench 용 Schema 와 User 생성

create database sysbench;

create user 'sysbench'@'localhost' identified by 'sysbench';
create user 'sysbench'@'127.0.0.1' identified by 'sysbench';

grant all on sysbench.* to 'sysbench'@'localhost';
grant all on sysbench.* to 'sysbench'@'127.0.0.1';

flush privileges;



Sysbench 실행

sysbench 는 명령어는 3가지로 구분됩니다.
- prepare : 테스트 데이터를 생성하는 과정
- run : 실제 테스트를 실행 (oltp-read-write, oltp-read-only 등)
- cleanup : 테스트 데이터를 삭제하는 과정

prepare -> run -> cleanup 순서로 진행하면 됩니다.


-- repare / oltp read only
sysbench --mysql-host=localhost --mysql-port=3306 --mysql-user=sysbench \
--mysql-password=sysbench --mysql-db=sysbench --table-size=5000000 \
--tables=5 /usr/local/sysbench/share/sysbench/oltp_read_only.lua prepare


-- run
sysbench --mysql-host=localhost --mysql-port=3306 --mysql-user=sysbench --report-interval=2 \
--mysql-password=sysbench --mysql-db=sysbench --table-size=5000000 --warmup-time=30 \
--threads=4 --tables=5 /usr/local/sysbench/share/sysbench/oltp_read_only.lua run


-- cleanup
sysbench --mysql-host=localhost --mysql-port=3306 --mysql-user=sysbench \
--mysql-password=sysbench --mysql-db=sysbench --threads=4 --table-size=5000000 \
--tables=5 /usr/local/sysbench/share/sysbench/oltp_read_only.lua cleanup


prepare 에서 테이블 사이즈별 용량은 대략 다음과 같습니다.
2000000 : 테이블당 428MB
3000000 : 테이블당 630MB
5000000 : 테이블당 990MB


Sysbench에서 많이 사용되는 옵션은 다음과 같습니다
--threads=N 사용할 스레드의 갯수를 지정 (기본1)
--events=N 총 이벤트 횟수를 지정 (기본 0 , 0은 무제한)
    --max-requests 가 deprecated 되면서 --events 로 대체 된 것입니다.
--time=N 실행 시간을 제한 (기본 10초, 지정하지 않으면 10초까지만 측정)
--rate=N tps를 제한 (기본은 0, 0은 최대 tps로 전송)
--report-interval=N 보고 주기의 간격을 지정 0 (0은 주기보고를 비활성화함, 초단위)
--warmup-time 막 구동한 시스템 벤치마크 할때 데이터베이스,페이지,캐시를 다시 채우기 위한 예열 시간을 지정



벤치마크 스크립트 

설치 경로/share/sysbench 에는 아래와 같은  lua 스크립트가 존재하며
파일명으로 대략적인 용도는 파악 할 수 있습니다.

/usr/local/sysbench/share/sysbench
oltp_common.lua
bulk_insert.lua
oltp_read_only.lua
oltp_insert.lua
oltp_delete.lua
oltp_read_write.lua
oltp_point_select.lua
select_random_ranges.lua
select_random_points.lua
oltp_write_only.lua
oltp_update_non_index.lua
oltp_update_index.lua




Sysbench 결과 

sysbench run수행시 아래와 같은 수행 결과를 확인 할 수 있습ㄴ다.

Threads started!

SQL statistics:
queries performed:
read: 260428
write: 0
other: 37204
total: 297632
transactions: 18602 (1859.45 per sec.)
queries: 297632 (29751.28 per sec.)
ignored errors: 0 (0.00 per sec.)
reconnects: 0 (0.00 per sec.)

Throughput:
events/s (eps): 1859.4548
time elapsed: 10.0040s
total number of events: 18602

Latency (ms):
min: 1.53
avg: 2.15
max: 16.12
95th percentile: 3.07
sum: 39948.55

Threads fairness:
events (avg/stddev): 4650.5000/50.63
execution time (avg/stddev): 9.9871/0.00



답글 남기기