일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- spring boot
- eks
- 스프링부트
- 0 replica
- SW Maestro
- Kubernetes
- propogation
- Database
- Salting
- logback
- SW 마에스트로
- traceId
- Strimzi
- Benchmarks
- minreplica
- keda
- docket
- Kafka
- MSSQL
- 동등성
- Debezium
- Software maestro
- yml
- zset
- hammerDB
- blue-green
- Helm
- Leaderboard
- slow query
- Grafana
- Today
- Total
김태오
Database 선택 & hammerDB 사용 본문
데이터베이스 시스템 선택은 장기적인 결과를 초래한다.
선택 이후 운영 과정에서 데이터베이스를 교체할 경우 마이그레이션이 쉽지 않기에 개발 초기에 문제를 예상하고 감지할 수 있어야 한다.
선택 과정에서 생각해야 하는 것들에는 다음이 있다.
- 스키마와 레코드 크기
- 클라이언트 수
- 쿼리 형식과 접근 패턴
- 읽기와 쓰기 쿼리 비율
- 위 변수들의 변동폭
이후 테스트 클러스터를 구성하고 워크로드를 시뮬레이팅 하는 과정이 있는데, 이는 YCSB(서빙 벤치마크), hammerDB 등의 툴로 가능하다.
다음은 hammerDB configuration이다.
원하는 directory에 hammerDB Dockerfile을 생성한다.
cd <directory>
touch Dockerfile
vi Dockerfile
FROM docker.io/tpcorg/hammerdb:oracle as oracle
FROM docker.io/tpcorg/hammerdb:mssqls
# Install and configure IBM Db2 client libraries,
# You will need to pre-download IDB Db2 client libraries and place in the local folder
# RUN mkdir -p db2_cli_odbc_driver/odbc_cli
# ADD odbc_cli db2_cli_odbc_driver/odbc_cli/
# RUN apt update && \
# echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections && \
# apt -y install libxml2 && \
# echo 'export DB2_CLI_DRIVER_INSTALL_PATH="/home/db2_cli_odbc_driver/odbc_cli/clidriver"' >> ~/.bashrc && \
# echo 'export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/home/db2_cli_odbc_driver/odbc_cli/clidriver/lib"' >> ~/.bashrc && \
# echo 'export LIBPATH="/home/db2_cli_odbc_driver/odbc_cli/clidriver/lib"' >> ~/.bashrc && \
# echo 'export PATH="$PATH:/home/db2_cli_odbc_driver/odbc_cli/clidriver/bin"' >> ~/.bashrc && \
# echo 'export PATH="$PATH:/home/db2_cli_odbc_driver/odbc_cli/clidriver/adm"' >> ~/.bashrc
COPY --from=oracle /home/instantclient_21_5 /home/instantclient_21_5
ENV ORACLE_LIBRARY=/home/instantclient_21_5/libclntsh.so
RUN echo 'export LD_LIBRARY_PATH=/home/instantclient_21_5/:$LD_LIBRARY_PATH' >> ~/.bashrc
RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install -y libmariadb3 libpq-dev libmysqlclient21 && \
rm -rf /var/lib/apt/lists/*
image를 build 한다.
docker build -t hammerdb .
container를 만들고 싶다면,
docker run -it --name <container name> hammerdb bash
이제 데이터베이스 테스트를 하는데, hammerDB cli 로 들어간다. 먼저 hammerDB CLI path를 찾아야 하는데,
docker exec -it hammerdb /bin/bash
들어가서 path를 찾고,
docker exec -it <container name> <path name>
하면 cli로 들어가진다.
이제 데이터베이스 종류를 선택하는데,
ora mssqls db2 mysql pg maria
oracle, MsSQL, IBM Db2, MySQL, PostgreSQL, MariaDB가 있다.
mysql 을 해보자.
이제 performance test 의 benchmark type을 골라야 하는데, Use-Case에 따라 다르다. https://www.hammerdb.com/benchmarks.html 참고
일단 TCP-C 타입으로 테스트해본다.
hammerdb> dbset bm TPC-C
dict(dictionary) 를 확인해봐야 하는데, 이게 hammerDB 버젼이랑 데이터베이스 타입, benchmark 타입마다 다를 수 있어서 설정에 차이가 있을 수 있다. 가령 그냥 set 키워드로 호스트 등을 설정할 수 있는 상황이 있고, diset을 하여 dictionary 자체에 변경을 줘야할 수 도있다.
hammerdb>print dict
Dictionary Settings for MySQL
connection {
mysql_host = 127.0.0.1
mysql_port = 3306
mysql_socket = /tmp/mysql.sock
mysql_ssl = false
mysql_ssl_two_way = false
mysql_ssl_linux_capath = /etc/mysql/certs
mysql_ssl_windows_capath = C:\mysql\certs
mysql_ssl_ca = ca-cert.pem
mysql_ssl_cert = client-cert.pem
mysql_ssl_key = client-key.pem
mysql_ssl_cipher = server
}
tpcc {
mysql_count_ware = 1
mysql_num_vu = 1
mysql_user = root
mysql_pass = mysql
mysql_dbase = tpcc
mysql_storage_engine = innodb
mysql_partition = false
mysql_prepared = false
mysql_total_iterations = 10000000
mysql_raiseerror = false
mysql_keyandthink = false
mysql_driver = timed
mysql_rampup = 2
mysql_duration = 5
mysql_allwarehouse = false
mysql_timeprofile = false
mysql_async_scale = false
mysql_async_client = 10
mysql_async_verbose = false
mysql_async_delay = 1000
mysql_connect_pool = false
}
현재 dict 구조인데, 여기에서 host, port, user, pass 등을 변경하고 싶으면
diset connection mysql_port <your port>
diset connection mysql_host <your host>
diset tpcc mysql_user <your user>
diset tpcc mysql_pass <your pass>
를 하면 된다.
만약 AWS RDS 의 데이터베이스를 로딩하려 한다면, Security Group에서 ip 를 열여줘야한다.
이제 스키마를 로딩할 차례인데,
vudestroy
그냥 clean 느낌이라고 생각하면 된다.
buildschema
스키마를 로딩하는 명령어인데, 설정을 잘 완료했다면 호스트와 포트 등이 뜨면서 대기시간이 좀 있다.
Vuser 1 created - WAIT IDLE
Vuser 1:RUNNING
Vuser 1:CREATING TPCC SCHEMA
Vuser 1:Ssl_cipher
Vuser 1:CREATING DATABASE tpcc
Vuser 1:CREATING TPCC TABLES
Vuser 1:Loading Item
Vuser 1:Orders Done
Vuser 1:End:Tue Oct 24 17:43:06 UTC 2023
Vuser 1:CREATING TPCC STORED PROCEDURES
Vuser 1:GATHERING SCHEMA STATISTICS
Vuser 1:TPCC SCHEMA COMPLETE
Vuser 1:FINISHED SUCCESS
ALL VIRTUAL USERS COMPLETE
Schema Build jobid=6537FC1D608703E253535343
다 끝났으면 이런식으로 뜬다.
이제 run을 돌려서 performance metrics를 확인할 수 있는데, RDS를 사용중이라면 CloudWatch에서 추가 모니터링을 할 수 있다. 그 전 virtual user 수도 설정 가능하다.
vurun
'Database' 카테고리의 다른 글
ORM에서 VARCHAR 타입의 컬럼이 포함된 인덱스를 타지 못하는 문제 (SQL Server) (0) | 2025.01.26 |
---|---|
Trigger를 사용하여 Database 에서 API 호출하기 (0) | 2024.06.02 |
Benchmarking types - OLTP & OLAP (1) | 2023.10.26 |