sysbench 1.0.20 를 이용한 MySQL 성능 (performance) 테스트

리눅스/MySQL|2022. 9. 1. 09:21
반응형

sysbench 는 설치된 MySQL DB 서버의 성능을 확인하는 도구 입니다.

아래는 Rocky Linux 8.6 환경에서 테스트 하였습니다.

 

 

1. 설치

 

# yum -y install sysbench


2. 테스트 DB 생성

 

데이터를 쓰고 읽을 테스트용 DB 를 하나 만들어 줍니다.
mysql> create database test;
Query OK, 0 rows affected (0.01 sec)

 


3. 테스트 데이터 준비

 

# sysbench \
--mysql-host=localhost \
--mysql-port=3306 \
--mysql-socket=/tmp/mysql.sock \
--mysql-user=root \
--mysql-password=12345678 \
--mysql-db=test \
--table-size=1000000 \
--tables=5 \
/usr/share/sysbench/oltp_read_only.lua \
prepare

(결과)
sysbench 1.0.20 (using bundled LuaJIT 2.1.0-beta2)

Creating table 'sbtest1'...
Inserting 1000000 records into 'sbtest1'
Creating a secondary index on 'sbtest1'...
Creating table 'sbtest2'...
Inserting 1000000 records into 'sbtest2'
Creating a secondary index on 'sbtest2'...
Creating table 'sbtest3'...
Inserting 1000000 records into 'sbtest3'
Creating a secondary index on 'sbtest3'...
Creating table 'sbtest4'...
Inserting 1000000 records into 'sbtest4'
Creating a secondary index on 'sbtest4'...
Creating table 'sbtest5'...
Inserting 1000000 records into 'sbtest5'
Creating a secondary index on 'sbtest5'...

* 참고1

명령 실행시 마지막줄 prepare 는 sysbench 에서 지원하는 명령어이며 사용 가능한 명령어 종류는 아래와 같습니다.
prepare, prewarm, run, cleanup, help

주로 사용하는 옵션
- prepare : 테스트를 준비합니다. test 데이터베이스에 테스트할 임시 데이터를 넣어 놓습니다.
- run : 실제적인 퍼포먼스 테스트를 진행 합니다.
- cleanup : 테스트 하면서 생성된 테이블 및 레코드를 삭제합니다.

 

* 참고2

/usr/share/sysbench 디렉토리에는 데이터 insert, read, delete 등의 테스트를 할 수 있는 파일이 준비되어 있습니다.

아래에서 순차적으로 실행해 보도록 하겠습니다.


(확인)
테스트 DB 에 테이블 생성 및 데이터 입력이 확인되었습니다.

mysql> show tables;
+--------------------+
| Tables_in_sysbench |
+--------------------+
| sbtest1            |
| sbtest2            |
| sbtest3            |
| sbtest4            |
| sbtest5            |
+--------------------+
5 rows in set (0.00 sec)

mysql> select count(*) from sbtest1;
+----------+
| count(*) |
+----------+
|  1000000 |
+----------+
1 row in set (0.75 sec)


4. 테스트 실행

 

# sysbench \
--mysql-host=localhost \
--mysql-port=3306 \
--mysql-socket=/tmp/mysql.sock \
--mysql-user=root \
--mysql-password=12345678 \
--mysql-db=test \
--table-size=1000000 \
--tables=5 \
/usr/share/sysbench/oltp_read_only.lua \
run

(결과)
sysbench 1.0.20 (using bundled LuaJIT 2.1.0-beta2)

Running the test with following options:
Number of threads: 1
Initializing random number generator from current time


Initializing worker threads...

Threads started!

SQL statistics:
    queries performed:
        read:                            145838
        write:                           0
        other:                           20834
        total:                           166672
    transactions:                        10417  (1041.42 per sec.)
    queries:                             166672 (16662.68 per sec.)  // 초당 16,662 개의 read 쿼리가 실행되었습니다.
    ignored errors:                      0      (0.00 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          10.0010s
    total number of events:              10417

Latency (ms):
         min:                                    0.91
         avg:                                    0.96
         max:                                    1.87
         95th percentile:                        1.01
         sum:                                 9995.05

Threads fairness:
    events (avg/stddev):           10417.0000/0.00
    execution time (avg/stddev):   9.9950/0.00

(결과2)

oltp_insert.lua 파일로 쓰기 테스트를 한 경우는 아래와 같은 결과가 나왔습니다.

    transactions:                        56036  (5602.54 per sec.)
    queries:                             56036  (5602.54 per sec.)  // 초당 5,602 개의 write 쿼리가 실행되었습니다.

 

(결과3)

oltp_delete.lua 파일로 삭제 테스트를 한 경우는 아래와 같은 결과가 나왔습니다.

    transactions:                        87458  (8744.05 per sec.)
    queries:                             87458  (8744.05 per sec.)  // 초당 8,744 개의 records 를 삭제 하였습니다.

 


5. 테스트 데이터 삭제

테스트를 마쳤으면 용량 확보를 위해 테스트 데이터를 삭제 합니다.

# sysbench \
--mysql-host=localhost \
--mysql-port=3306 \
--mysql-socket=/tmp/mysql.sock \
--mysql-user=root \
--mysql-password=12345678 \
--mysql-db=test \
--table-size=1000000 \
--tables=5 \
/usr/share/sysbench/oltp_read_only.lua \
cleanup

(결과)
sysbench 1.0.20 (using bundled LuaJIT 2.1.0-beta2)

Dropping table 'sbtest1'...
Dropping table 'sbtest2'...
Dropping table 'sbtest3'...
Dropping table 'sbtest4'...
Dropping table 'sbtest5'...

테스트 DB 도 같이 삭제해 줍니다.

 

mysql> drop database test;
Query OK, 0 rows affected (0.01 sec)

 

 

반응형

댓글()