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

Share

Last Updated on 5월 8, 2023 by Jade(정현호)

Sysbench - MySQL 성능 벤치마크 툴

Sysbench 는 LUA 스크립트를 이용하고 multi-thread 방식을 지원하는 벤치마크(benchmark) 툴 입니다

MySQL/MariaDB 데이터베이스에서 주로 사용하는 오픈 소스 벤치마킹 프로그램 이며 추가적으로 CPU에서 디스크 I/O, 메모리 성능 등의 시스템 테스트를 할 수 있습니다.

또한 PostgreSQL에서 벤치마킹을 지원 합니다.

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



Sysbench Install

사전 패키지 설치

- RHEL/CentOS 7 버전 기준 - RPM 계열
[root]# yum -y install git make \
automake libtool pkgconfig libaio-devel


- Ubuntu/Debian 계열
user$ sudo apt install git make \
automake libtool libaio-dev pkg-config



GitHub 에서 파일 다운로드

[root]# git clone https://github.com/akopytov/sysbench.git

[root]# cd sysbench


autogen 과 configure

[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 위치에 설치 하도록 하였습니다.

mysql-community-devel 패키지가 설치 되어있을 경우 아래와 같이 configure 에서 prefix 만 설정해도 됩니다.
[root]# ./configure --prefix=/usr/local/sysbench


컴파일 및 설치 파일 복사

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

일반 유저로 진행시 make 는 sudo 를 사용해서 진행 합니다.

user$ sudo make install


sysbench 버전 확인

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


PATH 환경변수 추가

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

source .bash_profile
        

Sysbench 용 Schema 와 User 생성

Sysbench 에서 접속, 테이블 생성 및 데이터 적재 등을 하는 별도의 전용 데이터베이스 와 유저를 생성 하도록 하겠습니다.

데이터베이스 생성
create database sysbench;


유저 생성
create user 'sysbench'@'localhost' IDENTIFIED WITH 'mysql_native_password' BY 'sysbench';

create user 'sysbench'@'127.0.0.1' IDENTIFIED WITH 'mysql_native_password' 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 순서로 진행하면 됩니다.

[참고] 패스워드에 특수문자가 있을 경우
특수문자 앞에 \(역슬래시)를 사용 하시면 됩니다.
예를 들어 패스워드가 Aa1!2@3# 일 경우 Aa1\!2\@3\# 와 같이 처리하시면 됩니다.


-- repare / oltp read only
sysbench --mysql-host=localhost --mysql-port=3306 --mysql-user=sysbench \
--mysql-password=sysbench --mysql-db=sysbench --table-size=5444444 \
--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=5444444 --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=5444444 \
--tables=5 /usr/local/sysbench/share/sysbench/oltp_read_only.lua cleanup


prepare 에서 테이블 사이즈별 용량은 대략 다음과 같습니다.
2444444 : 테이블당 428MB
3444444 : 테이블당 630MB
5444444 : 테이블당 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



관련된 다른 글

     

0
글에 대한 당신의 생각을 기다립니다. 댓글 의견 주세요!x