본문 바로가기
Log/Experiment

exp013_DB Connection Pool 수 확대로 인한 게시글 생성 성공률 변화 관찰

by RIEM 2023. 3. 4.

Title

exp013_DB Connection Pool 수 확대로 인한 게시글 생성 성공율 변화 관찰

Research Question

DB Connection Pool 수를 올리면 게시글 생성 성공률이 상승할까?

Summary

  • 현재 조건으로 테스트를 진행한 결과, DBCP 크기 별 게시글 생성 성공률이 크게 달라지지 않았다. 이 문제 원인에 대한 가설은 아래와 같다
  • 1) connection pool 게시글 생성 성공률에 영향을 미치지 않거나, 2) connection pool 설정 방법이 잘못되었다
  • 추가적인 테스트로 위 가설을 증명할 필요가 있을 것으로 판단됨

Background Information

Situation

  • 부하 테스트 툴 nGrinder을 활용하여 경매 래플 어플리케이션 시스템의 서버 부하 테스트 진행중인 상황.

Current Experiment

  • test-pyramid-20230303-003

Procedures

Screen Shot 2023-03-03 at 8 19 35 PM

Connection Pool

DB connection 풀을 설정하기 위해선 우선 현재 우리의 connection pool을 알아야 한다.

현재 DB는 RDS Postgres를 사용중이다.

AWS RDS Postgres의 경우, default max_connections 가 아래와 같은 공식으로 계산할 수 있다고 한다.

max_connections = LEAST({DBInstanceClassMemory/9531392}, 5000)

현재 db.t3.micro(Ram 1G, CPU 2)

  • DBInstanceClassMemory = 1024 * 1024 * 1024 / 9531392 = 112.6
  • max_connections 수는 112개인 것으로 해석했다

Screen Shot 2023-03-03 at 10 17 10 PM

  • 현재 DB에 설정한 max_connections 수를 알고싶으면 이렇게 SQL 명령어를 써보면 된다.

TypeORM은 default connections pool을 10으로 설정해둔다고 한다. 만약 이것이 사실이라면, 만약 내가 connections를 max 20으로 수정했을 때 성능의 변화가 있어야 한다. 이 가설을 한번 검증해보도록 해보자. 정리하자면 이렇다.

  • 현재 추정 connection 수 : 10

  • 변경할 connection 수 : 20

  • 현재 DB 최대 connections 수 : 83

  • 비교 실험 : test-pyramid-20230303-001

    • VUser : 3000
    • RunCount : 10
    • max_connection : 10
    • 게시글 생성 성공율 : 41.7%
  • 현재 실험 : test-pyramid-20230303-003

    • VUser : 3000
    • RunCount : 10
    • max_connection : 20
    • 게시글 생성 성공율 : 42%

가설 : connections 수를 2배로 늘리면 성공률이 기존 41.7%에서 80% 이상 상승할 것이다

Data Recording & Analysis

test-pyramid-20230303-003

  • connection pool : 20
  • Vuser : 3000
  • Run count : 10
  • Total request : 30000
  • Ramp-up : True
  • 테스트 시작 전 DB 데이터 개수 : 0
  • 테스트 완료 후 DB 데이터 개수 : 12601
  • 테스트 중 생성 데이터 개수 : 12601

Screen Shot 2023-03-03 at 11 27 13 PM

Screen Shot 2023-03-03 at 11 41 57 PM
VUser 1233명에서 테스트가 멈추었다. 이번에도 1240명대에 근접했다.

게시글 생성 시도 30,000건 중 생성된 것은 총 12,601건으로 게시글 생성 성공율은 약 42%다.
connection pool이 10(default)였을 때, 게시글 생성 성공률은 42.3%였는데, connection pool을 20으로 올리니 거의 유사한 42% 수준이 나왔다.

connection pool을 올렸는데도 게시글 생성 성공율 개선에 효과가 없었다.

Screen Shot 2023-03-03 at 11 50 15 PM
리소스 사용률은 좀 흥미로웠다. connection pool 10이었을 때 테스트에서는 웹서버 CPU 사용률이 14.5%였던 반면 connection pool 20이었을 때는 7.8%으로 절반 수준으로 감소했다. 반면 DB CPU 사용률은 약 3% 상승했다. Connection Pool의 개수와 서버, DB CPU 사용률 간 상관관계가 있는 것일까? 좀 더 데이터가 필요하다.

혹시 connection pool 10에서 20으로의 상승의 폭이 너무 적어서 그런 것일까? 그럼 20이 아니라 40으로 총 4배를 늘려보기로 했다.

test-pyramid-20230303-004

  • connection pool : 40
  • Vuser : 3000
  • Run count : 10
  • Total request : 30000
  • Ramp-up : True
  • 테스트 시작 전 DB 데이터 개수 : 0
  • 테스트 완료 후 DB 데이터 개수 : 12655
  • 테스트 중 생성 데이터 개수 : 12655

Screen Shot 2023-03-03 at 11 54 04 PM
typeORM의 poolSize를 20에서 40으로 올렸다.

Screen Shot 2023-03-03 at 11 58 31 PM
VUser 1243명에서 또 테스트가 중지되었다.

게시글 생성 시도 30,000회 중 총 12,655회 성공하여, 게시글 생성 성공률 42.2%를 기록했다. 이는 connection pool 10, 20의 경우와 0.5% 이하으로, 즉 거의 차이가 없는 수준이다. 리소스 사용률도 유의미한 변화가 없었다.

마지막으로 다시 한번만 해보자. 이번에는 Connection pool 1로 설정할 것이다. 그 이유는 CPU Core 수 하나에 일반적으로 10-20의 connection pool을 설정해준다는 내용을 봤기 때문이다. 만약 그렇다면 생각보다 우리가 설정할 수 있는 connection pool의 범위가 높지 않을 수 있다는 생각이 들었다. 이를 검증하기 위해 극도로 connection pool을 낮춰서 테스트를 해보면 무언가 변화가 있을 것 같다는 생각이 들었다.

test-pyramid-20230303-007

Screen Shot 2023-03-04 at 1 47 19 AM
connection pool을 1로 설정해주었다.

추가 현재 실험 : test-pyramid-20230303-007

  • connection pool : 1
  • Vuser : 3000
  • Run count : 10
  • Total request : 30000
  • Ramp-up : True
  • 테스트 시작 전 DB 데이터 개수 : 0
  • 테스트 완료 후 DB 데이터 개수 : 11994
  • 테스트 중 생성 데이터 개수 : 11994

유의미한 변화가 없다.

Discussion

지금까지 진행한 테스트 3개를 정리하면 이렇다.

DBCP 크기 별 게시글 생성 성공률

  • connection pool 10 : 41.7%
  • connection pool 20 : 42%
  • connection pool 40 : 42.2%
  • connection pool 1 : 40%

지금까지 테스트를 진행하고 떠오르는 생각은 이렇다

  • connection pool 게시글 생성 성공률에 영향을 미치지 않는 것이 아닐까?
  • connection pool 설정 방법이 잘못된 것이 아닐까?

Conclusion

  • 현재 조건으로 테스트를 진행한 결과, DBCP 크기 별 게시글 생성 성공률이 크게 달라지지 않았다. 이 문제 원인에 대한 가설은 아래와 같다
  • 1) connection pool 게시글 생성 성공률에 영향을 미치지 않거나, 2) connection pool 설정 방법이 잘못되었다
  • 추가적인 테스트로 위 가설을 증명할 필요가 있을 것으로 판단됨

Reference

Appendix

test-pyramid-20230303-003

Application Server

Screen Shot 2023-03-03 at 11 47 18 PM

RDS

Screen Shot 2023-03-03 at 11 47 52 PM

test-pyramid-20230303-004

application server

Screen Shot 2023-03-04 at 12 07 07 AM

RDS

Screen Shot 2023-03-04 at 12 07 30 AM

댓글