티스토리 뷰

반응형

Mysql 서버별 성능 테스트를 하고싶다면?

하드웨어 종류별, my.cnf 설정별로 또는 다른 요소로 인해 성능 차이가 발생할텐데 그 성능을 비교 테스트 해볼수 있는 툴을 소개한다. 


바로 DBT2 벤치마크 툴이다. 

MySQL Benchmark Tool :https://dev.mysql.com/downloads/benchmarks.html

벤치마킹을 별다른 설정없이 자동으로 다 해주어 편리하게 테스트 해볼수 있다.


다만 설정부터 테스트까지의 방법이 여간 까다롭고 자세한 설명이 없어서 시작부터 순조롭지 않았다.

다행히 설치부터 테스트까지 한방에 되도록 스크립트를 만들어 github 에 공유한 자료를 찾을 수 있었다.


github 참고 사이트 바로가기 : https://gist.github.com/BenMorel/6131673


필자는 위의 코드를 가지고도 한방에 되지 않아 몇번의 삽질과 함께 다음과 같이 변경하였다. 

#!/bin/sh

set -e

dbtDataDir='/root/tmp'


host='192.168.xxx.xxx'
user='root'
pass='xxxx'


mysql_path=$(which mysql)
mysql_dir_path=$(dirname $mysql_path)


log() {
  echo
  echo -e "\e[37;42m$1\e[0m"
}


log 'Downloading...'
wget -q -O - http://downloads.mysql.com/source/dbt2-0.37.50.10.tar.gz | tar xvz -C "$dbtDataDir"


cd "$dbtDataDir"/dbt2-0.37.50.10

# Fix a parameter too small in one of the stored procedures
search='out_w_city VARCHAR(10);'
replace='out_w_city VARCHAR(20);'
sed -i "s/$search/$replace/g" storedproc/mysql/payment.sql


# Fix an extra space breaking the password functionality
sed -i 's/"-p $DB_PASSWORD"/"-p$DB_PASSWORD"/g' scripts/mysql/mysql_load_db.sh


# 프로시저 등록부 스크립트 공백 제거
sed -i 's/"-h $DB_HOST"/"-h$DB_HOST"/g' scripts/mysql/mysql_load_sp.sh
sed -i 's/"-p $DB_PASSWORD"/"-p$DB_PASSWORD"/g' scripts/mysql/mysql_load_sp.sh


# Create the data directory
mkdir "$dbtDataDir"/dbt


log 'Configuring...'
./configure --with-mysql


log 'Compiling...'
make


log 'Generating the data files...'
src/datagen -w 30 -d "$dbtDataDir"/dbt --mysql

log 'Loading the data into the database...'
scripts/mysql/mysql_load_db.sh \
  --path "$dbtDataDir"/dbt \
  --local \
  --mysql-path "$mysql_path" \
  --host "$host" \
  --user "$user" \
  --password "$pass"


log 'Loading the stored procedures...'
scripts/mysql/mysql_load_sp.sh \
  --client-path "$mysql_dir_path" \
  --sp-path storedproc/mysql \
  --host "$host" \
  --user "$user" \
  --password "$pass"

log 'Running the benchmark...'
scripts/run_mysql.sh \
  --connections 20 \
  --time 300 \
  --warehouses 30 \
  --zero-delay \
  --host "$host" \
  --user "$user" \
  --password "$pass"


원본 스크립트로 실행시 프로시저 등록부분에서 패스워드를 묻고 에러가 나는데
 원인은 해당 스크립트의 mysql 연결 커맨드가 -h {host} -p {password} 와 같이 공백이 들어가 있어서였다. 

설치파일 컨피그시 에러가 나지는 않는지, 필요한 패키지가 있다면 설치하고 다시 실행해보자. 


스크립트는 설치 과정을 거쳐, 데이터 생성 과정을 거쳐, 접속한 mysql 서버에 생성한 데이터를 추가하는 과정을 거치고, 프로시저 등록 과정을 거치고 마지막으로 벤치마킹을 시행하게 된다. 

데이터 생성부터 데이터 입력까지 시간이 15분 정도 걸린다.

데이터베이스에 dbt2 라는 스키마에 데이터가 입력되고 약 3기가정도의 테이블 스페이스를 필요로하게된다.

위의 스크립트에 별다른 설정을 하지 않으면 엔진이 기본 innoDB로 생성이 된다. 

벤치마킹 총 소요시간은 약 20~30분 정도이다. 

 

위의 스크립트를 실행하면 아래와같은 화면을 볼수있다. 


여기까지 프로시저를 추가하고있다. 


스키마를 살펴보면 아래와같이 테이블과 프로시저가 등록된것을 볼수있다. 



 


그리고 본격적으로 테스트가 진행이 되는데, 

테스트가 완료되면 위와같이 결과 보고서를 보여준다. 


위의 결과는 현재 회사에 운영중인 서버중 하나이다. 스펙이 깡패이긴 하지만 ssd 로 구성이 되어 용량이 넉넉하지 않았다. 

로그들은 쌓여가고 , 용량은 점점 줄어들어 조치를 하기로 했다. 

조회 빈도가 낮고 많은 용량을 차지하는 단순 로그들을 openstack 서버에 인스턴스 하나를 추가해서 몰아넣기로 했는데, 

그래도 가끔씩 조회를 하기때문에 어느정도 성능이 나와야 한다. 

그래서 openstack에 추가한 인스턴스에서도 테스트를 진행했는데..


결과는 아래와 같이 나왔다.

                         Response Time (s)

 Transaction      %    Average :    90th %        Total        Rollbacks      %

------------  -----  ---------------------  -----------  ---------------  -----

    Delivery   3.82     27.706 :    46.908          132                0   0.00

   New Order  44.89     26.315 :    41.965         1550               14   0.90

Order Status   3.82     24.161 :    45.673          132                0   0.00

     Payment  43.93     25.675 :    42.481         1517                0   0.00

 Stock Level   3.45     24.188 :    40.064          119                0   0.00

할당된 자원도 부족함이 없어보이는데.. 

결과가 암울하다, 서비스하기에는 조금 어려워 보였다. 


다음번에 MyISAM 으로 엔진을 바꾸고 다시 테스트 해봐야겠다. 

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함