본문 바로가기
IT

파이썬(python)으로 MariaDB(MySQL) DBMS 성능 측정하는 법 - py-tpcc로 tpcc 테스트 하기

by geddy 2024. 1. 25.

이 글에서는 py-tpcc라는 python으로 만들어진 오픈소스 tpcc 테스트 프로그램으로 mysql을 연동해서 실행하는 법을 설명합니다.

py-tpcc로 MariaDB tpcc 테스트 하기 썸네일

1. 사전 조건

먼저 테스트하려는 장비에 MariaDB 혹은 MySQL이 설치되어있고, pyodbc와 unix-odbc가 설치되어있어야 합니다.

이러한 준비를 위한 관련 내용은 아래 링크에서 확인하실 수 있습니다.

Mariadb에 Linux unixODBC로 데이터베이스 연동 우분투 22.04

2. py-tpcc 소스 다운로드

github py-tpcc by lswhh clone

https://github.com/lswhh/py-tpcc

 

GitHub - lswhh/py-tpcc: MongoDB Adaptation of PyTPCC

MongoDB Adaptation of PyTPCC. Contribute to lswhh/py-tpcc development by creating an account on GitHub.

github.com

아래 git clone을 수행하여 해당 소스를 다운 받습니다.

~$ git clone https://github.com/lswhh/py-tpcc
'py-tpcc'에 복제합니다...
remote: Enumerating objects: 1016, done.
remote: Counting objects: 100% (68/68), done.
remote: Compressing objects: 100% (52/52), done.
remote: Total 1016 (delta 34), reused 35 (delta 16), pack-reused 948
오브젝트를 받는 중: 100% (1016/1016), 4.81 MiB | 6.23 MiB/s, 완료.
델타를 알아내는 중: 100% (672/672), 완료.

 

tpcc.py 소스가 있는 디렉토리로 이동합니다.

~/py-tpcc$ cd pytpcc/
~/py-tpcc/pytpcc$ pwd
/home/mariadb/py-tpcc/pytpcc

 

3. odbctpcc.py 명령 확인

소스 다운로드 후 odbctpcc.py를 python으로 실행해서 help를 확인하면 다음과 같습니다.

원본 소스는 tpcc.py를 사용하는 것인데, mysql의 경우 pyodbc를 사용합니다. 그래서, odbctpcc.py를 실행해야합니다.

python3 odbctpcc.py -h
usage: tpcc.py [-h] [--config CONFIG] [--reset] [--scalefactor SF] [--warehouses W] [--duration D] [--ddl DDL] [--clients N]
               [--stop-on-error] [--no-load] [--no-execute] [--print-config] [--debug]
               {cassandra,scalaris,hbase,csv,membase,mariadb,mongodb,tokyocabinet,redis,sqlite,couchdb}

Python implementation of the TPC-C Benchmark

positional arguments:
  {cassandra,scalaris,hbase,csv,membase,mariadb,mongodb,tokyocabinet,redis,sqlite,couchdb}
                        Target system driver

options:
  -h, --help            show this help message and exit
  --config CONFIG       Path to driver configuration file
  --reset               Instruct the driver to reset the contents of the database
  --scalefactor SF      Benchmark scale factor
  --warehouses W        Number of Warehouses
  --duration D          How long to run the benchmark in seconds
  --ddl DDL             Path to the TPC-C DDL SQL file
  --clients N           The number of blocking clients to fork
  --stop-on-error       Stop the transaction execution when the driver throws an exception.
  --no-load             Disable loading the data
  --no-execute          Disable executing the workload
  --print-config        Print out the default configuration file for the system and exit
  --debug               Enable debug log messages

 

간단하게 테스트 동작을 확인하기 위해서 다음 명령을 실행합니다.

warehouse에 입력되는 숫자가 1000인 경우 100GB의 데이터 크기를 말합니다. 그러므로, 10이 1GB의 데이터를 의미하고 1은 0.1GB 즉, 100MB를 의미합니다.

아래 명령은

python3 odbctpcc.py --warehouses 1 --client 1 --duration 1 mariadb

 

데이터가 이미 로드된 상태에서 테스트만 재실행하기 위해서는 아래 명령을 실행합니다.

python3 odbctpcc.py --warehouses 1 --client 1 --duration 1 --no-load mariadb

 

실행하기: python3 odbctpcc.py --warehouses 1 --client 1 --duration 1 --reset mariadb

4. pytpcc 결과 보는 법

결과는 텍스트로 출력되며 TPC-C 벤치마크 테스트의 결과를 출력합니다. TPC-C는 데이터베이스 시스템의 성능을 측정하는 표준 벤치마크입니다. 결과는 테스트의 실행 시간, 각 트랜잭션의 완료 횟수, 실행 시간, 재시도 횟수, 최소/최대/퍼센타일 지연 시간 등을 출력합니다.

pytpcc의 최종 출력은 다음과 같은 정보를 포함합니다:

Complete: 각 트랜잭션의 완료 횟수입니다.
Time (s): 각 트랜잭션의 총 실행 시간입니다.
Percentage: 각 트랜잭션의 완료 횟수와 실행 시간이 전체 트랜잭션에 대한 비율입니다.
Retries: 각 트랜잭션의 재시도 횟수입니다.
minLatMs, p50, p75, p90, p95, p99, maxLatMs: 최소 latency(응답시간, 지연시간)과

각 트랜잭션의 중간, 75번째 백분위수, 90번째 백분위수, 95번째 백분위수, 99번째 백분위수, 최대 지연 시간입니다.
Aborts: 각 트랜잭션의 중단 횟수입니다.


따라서 테스트 수행  후 출력 결과를 통해 테스트의 전반적인 성능을 파악하고, 각 트랜잭션의 성능을 비교하며, 잠재적인 문제를 찾을 수 있습니다. 예를 들어, 특정 트랜잭션의 재시도 횟수가 높거나 지연 시간이 길다면, 해당 트랜잭션에 문제가 있을 수 있습니다. 이러한 정보는 데이터베이스 시스템의 성능을 최적화하는 데 도움이 될 수 있습니다.

 

주의사항 - 캐릭터셋

마리아디비를 pytpcc로 테스트 할 때 캐릭터셋은 utf8로 수행하는 것이 좋습니다. 다른 캐릭터셋으로 수행 시 오류가 발생하는 경우를 확인했으므로 가급적이면 utf8로 진행하시기 바랍니다.

MariaDB [tpcc]> status
--------------
mariadb Ver 15.1 Distrib 10.6.12-MariaDB, for debian-linux-gnu (x86_64) using EditLine wrapper

Connection id: 246
Current database: tpcc
Current user: tpcc@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server: MariaDB
Server version: 10.6.12-MariaDB-0ubuntu0.22.04.1 Ubuntu 22.04
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8mb4
Db characterset: utf8mb4
Client characterset: utf8mb3
Conn. characterset: utf8mb3
UNIX socket: /run/mysqld/mysqld.sock
Uptime: 15 days 23 hours 14 min 12 sec

Threads: 1 Questions: 21534227 Slow queries: 3 Opens: 613 Open tables: 39 Queries per second avg: 15.608
--------------

MariaDB [tpcc]> SELECT schema_name , default_character_set_name
-> FROM information_schema.schemata ;
+--------------------+----------------------------+
| schema_name | default_character_set_name |
+--------------------+----------------------------+
| information_schema | utf8mb3 |
| tpcc | utf8mb4 |
+--------------------+----------------------------+
2 rows in set (0.001 sec)

facebook twitter kakaoTalk kakaostory naver band shareLink