본문 바로가기
IT

python으로 Altibase DBMS 성능 테스트 하기 - py-tpcc로 altibase tpcc 테스트하는 법

by developer's warehouse 2024. 2. 16.

일반 dbms를 사용중인데, 성능이 문제가 되는 경우가 발생하였습니다. 그런데, NoSQL 종류의 DBMS들과 비교를 해 보고 싶어서 온라인 OLTP 트랜잭션 성능을 측정하는 tpcc 테스트를 통해 비교하고 싶었습니다. 그런데, NoSQL류와 mariaDB나 altibase와 같은 일반 DBMS를 비교할 수 있는 것을 찾아보다가 py-tpcc를 알게되었습니다. 오늘은 py-tpcc로 altibase dbms의 성능을 측정하는 방법을 알아보겠습니다.

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

py-tpcc란?

py-tpcc는 Python으로 작성된 TPC-C 성능 테스트 도구입니다. TPC-C는 온라인 트랜잭션 처리(OLTP) 벤치마크로, 온라인 비즈니스에서 사용되는 여러 트랜잭션 유형을 잘 묘사한 벤치마크 테스트입니다.

py-tpcc는 특히 MongoDB와 같은 NoSQL 데이터베이스의 성능을 테스트하는 데 사용됩니다. 실제로 MongoDB에서는 이 py-tpcc를 이용하여 성능을 측정하였습니다. py-tpcc를 통해 대량의 짧고 빠른 트랜잭션을 처리하는 데이터베이스 관리 시스템과 NoSQL의 성능을 비교해 볼 수 있습니다.

 

py-tpcc를 사용하면 데이터베이스의 성능을 정확하게 측정하고 비교할 수 있어, 데이터베이스 선택이나 성능 최적화에 도움이 될 수 있습니다. 이 도구는 오픈 소스로 제공되므로, 필요에 따라 사용자가 직접 코드를 수정하거나 확장할 수도 있습니다.

py-tpcc로 Altibase 성능 측정을 위한 사전 준비

Altibase와 같은 일반 DBMS에서 py-tpcc를 테스트하기 위해서는 python과 연동을 해야합니다. 물론 Altibase는 당연히 설치되어있어야 합니다.

altibase를 python과 연동하기 위한 가장 쉬운 방법은 pyodbc를 이용하는 것입니다. 이를 위해서 먼저 Altibase를 pyodbc에 연동해야합니다. Altibase에서 pyodbc를 사용하는 방법은 아래 링크에서 확인하실 수 있습니다. 먼저 아래 링크를 따라서 altibase를 pyodbc로 연동해 놓습니다.

 

우분투-2204-리눅스에서-pyodbc로-altibase-DBMS-연동하기

 

우분투 22.04 리눅스에서 pyodbc로 altibase DBMS 연동하기

지난 포스팅에서 unixODBC를 통해 altibase memory db에 접속하는 것을 확인하였습니다. 이번에는 python의 pyodbc로 해당 DBMS에 접근해서 데이터 조작을 하는 방법을 알아보도록 하겠습니다. Table Of Contents

wellife.info

 

주의사항으로 Altibase에는 isql 이라는 툴이 있는데, unixODBC에도 동일하게 isql이 존재합니다. 테스트를 위해서는 Altibase의 isql을 사용하므로 $ALTIBASE_HOME/bin이 PATH 환경변수에 먼저 나와있어야 합니다.

Altibase 성능 측정을 위한 py-tpcc 소스코드 다운로드

altibase나 mariadb 같은 일반 DBMS의 경우 MongoDB의 공식 py-tpcc 소스에서는 성능측정이 되지 않습니다. 그러므로, altibase용 드라이버가 구현된 아래 github의 소스를 다운받습니다.

 

 

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 https://github.com/lswhh/py-tpcc

 

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

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

 

py-tpcc로 Altibase 성능 테스트

위에서 설명드린 py-tpcc를 clone 받으면 tpcc.py 파일이 있습니다. 이 파일을 이용해서 pyodbc로 연동된 일반 DBMS의 tpcc 성능 테스트를 할 수 있습니다.

help 명령을 다음과 같이 수행해 보면 실행할 수 있는 옵션들을 확인할 수 있습니다.

~/py-tpcc/pytpcc$ python3 tpcc.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,altibase,mongodb,tokyocabinet,redis,sqlite,couchdb}

Python implementation of the TPC-C Benchmark

positional arguments:
  {cassandra,scalaris,hbase,csv,membase,mariadb,altibase,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

 

테스트를 실행하기 위해서는 아래 명령을 수행하여 정상 동작 여부를 가장 빠르게 테스트를 간단하게 해 볼 수 있습니다.

python3 tpcc.py --warehouses 1 --client 1 --duration 1 altibase

 

기본적으로 warehouse는 4개의 default 값을 가지며 client는 default 1입니다. 그리고, 중요한 duration은 60초의 기본 값을 가집니다.

즉, 다음과 같이 수행하면 warehouse 4, scalefactor 1, 그리고 duration 60의 값을 가지게 되어서 16 클라이언트가 약 400MB 데이터에 대해서 1분 동안 tpcc 테스트 한 결과를 보여줍니다.

 

python3 odbctpcc.py --client 16 altibase

 

테스트를 간략하게 수행하면 처음에 몇 가지 정보와 db 초기화 등을 거치고 난 후 data를 loading합니다. 데이터 로딩은 수백건씩 삽입하면서 중간에 에러가 발생한 현황등을 출력합니다.

데이터 로딩이 끝나고 나면 지정된 시간과 클라이언트를 이용해서 테스트를 수행한 후 결과를 텍스트로 출력합니다.

다음은 1 client로 1초동안 4개의 warehouse에 pytpcc 테스트를 수행한 결과를 보여줍니다.

% python3 tpcc.py --client 1 --duration 1 --reset altibase
2024-02-15 17:34:39,988 [<module>:249] INFO : Reseting database
command: isql -s 127.0.0.1 -u sys -p manager < drop.sql
command: isql -s 127.0.0.1 -u sys -p manager  < altibase-tpcc.sql
connection string: DSN=altibase-dsn;UID=sys;PWD=manager;
2024-02-15 17:34:40,468 [<module>:252] INFO : Initializing TPC-C benchmark using altibase-dsn
2024-02-15 17:34:40,469 [<module>:262] INFO : Loading TPC-C benchmark data using altibase-dsn
...
bulk data inserted 500 rows into table: STOCK, error occur 0 rows
bulk data inserted 500 rows into table: STOCK, error occur 0 rows
2024-02-15 17:49:42,585 [loadFinish:259] INFO : Commiting changes to database
2024-02-15 17:49:44,119 [<module>:289] INFO : Final Results
2024-02-15 17:49:44,119 [<module>:290] INFO : Threads: 1
{'NEW_ORDER': 41, 'PAYMENT': 29, 'STOCK_LEVEL': 5, 'DELIVERY': 3, 'ORDER_STATUS': 3}
{'DELIVERY': {'latency': {'min': 25.457382202148438, 'max': 33.4315299987793, 'p50': 26.34406089782715, 'p75': 33.4315299987793, 'p90': 33.4315299987793, 'p95': 33.4315299987793, 'p99': 33.4315299987793}, 'total': 3}, 'NEW_ORDER': {'latency': {'min': 8.667707443237305, 'max': 46.47207260131836, 'p50': 16.320228576660156, 'p75': 19.53744888305664, 'p90': 22.897958755493164, 'p95': 29.289960861206055, 'p99': 46.47207260131836}, 'total': 41}, 'ORDER_STATUS': {'latency': {'min': 1.3432502746582031, 'max': 8.341550827026367, 'p50': 2.726316452026367, 'p75': 8.341550827026367, 'p90': 8.341550827026367, 'p95': 8.341550827026367, 'p99': 8.341550827026367}, 'total': 3}, 'PAYMENT': {'latency': {'min': 2.8145313262939453, 'max': 16.49332046508789, 'p50': 6.321191787719727, 'p75': 7.370710372924805, 'p90': 11.198997497558594, 'p95': 11.283397674560547, 'p99': 16.49332046508789}, 'total': 29}, 'STOCK_LEVEL': {'latency': {'min': 2.4347305297851562, 'max': 6.731271743774414, 'p50': 2.722501754760742, 'p75': 3.016948699951172, 'p90': 6.731271743774414, 'p95': 6.731271743774414, 'p99': 6.731271743774414}, 'total': 5}}
2024-02-15 17:49:44,120 [<module>:291] INFO :
========================================================================================================================================================================================================
Data Loading Time: 902 seconds

Execution Results after 1 seconds
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
                  Complete        Time (µs)       Percentage      Retries         minLatMs        p50             p75             p90             p95             p99             maxLatMs        Aborts
  DELIVERY        3                   0.085        3.70           0,0             25.46            26.34           33.43           33.43           33.43           33.43           33.43          0
  NEW_ORDER       41                  0.697       50.62           0,0              8.67            16.32           19.54           22.90           29.29           46.47           46.47          1
  ORDER_STATUS    3                   0.012        3.70           0,0              1.34             2.73            8.34            8.34            8.34            8.34            8.34          0
  PAYMENT         29                  0.177       35.80           0,0              2.81             6.32            7.37           11.20           11.28           16.49           16.49          0
  STOCK_LEVEL     5                   0.017        6.17           0,0              2.43             2.72            3.02            6.73            6.73            6.73            6.73          0
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  TOTAL           81                     0.989

 

pytppc로 altibase 테스트 후 결과 보는 법

pytpcc의 테스트 결과를 하나씩 설명드리겠습니다.

먼저, 데이터를 로딩하는데는 902초가 걸렸다는 것을 출력해 줍니다. 다음으로 duration 기간동안 client가 접속해서 tpcc 테스트를 수행한 결과를 표로 보여줍니다. 하나의 로우는 tpcc에서 사용하는 비즈니스 로직의 테스트 항목을 나타납니다. 주로 살펴보는 것은 NEW_ORDER가 몇 건 처리되었는지 보는것입니다.

아래 테스트 결과를 보시면 NEW_ORDER는 1초에 1client로 41건이 처리된 것을 보실 수 있습니다.

===================================================================================================================================================================================================                              =====
Data Loading Time: 902 seconds

Execution Results after 1 seconds
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------                              -----
                  Complete        Time (µs)       Percentage      Retries         minLatMs        p50             p75             p90             p95             p99             maxLatMs        A                              borts
  DELIVERY        3                   0.085        3.70           0,0             25.46            26.34           33.43           33.43           33.43           33.43           33.43          0                              
  NEW_ORDER       41                  0.697       50.62           0,0              8.67            16.32           19.54           22.90           29.29           46.47           46.47          1                              
  ORDER_STATUS    3                   0.012        3.70           0,0              1.34             2.73            8.34            8.34            8.34            8.34            8.34          0                              
  PAYMENT         29                  0.177       35.80           0,0              2.81             6.32            7.37           11.20           11.28           16.49           16.49          0                              
  STOCK_LEVEL     5                   0.017        6.17           0,0              2.43             2.72            3.02            6.73            6.73            6.73            6.73          0                              
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------                              -----
  TOTAL           81                     0.989

 

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

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

 

오늘은 DBMS 성능 테스트 툴인 pytpcc를 이용해서 python(파이썬)으로 altibase라는 메모리 DBMS의 성능 테스트를 하는 방법을 알아보았습니다.

오픈소스 툴인 pytpcc를 이용해서 일반 DBMS와 NoSQL간의 성능 측정과 비교를 어렵지 않게 할 수 있는 것 같습니다.

facebook twitter kakaoTalk kakaostory naver band shareLink