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
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개인 것으로 해석했다
- 현재 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
VUser 1233명에서 테스트가 멈추었다. 이번에도 1240명대에 근접했다.
게시글 생성 시도 30,000건 중 생성된 것은 총 12,601건으로 게시글 생성 성공율은 약 42%다.
connection pool이 10(default)였을 때, 게시글 생성 성공률은 42.3%였는데, connection pool을 20으로 올리니 거의 유사한 42% 수준이 나왔다.
connection pool을 올렸는데도 게시글 생성 성공율 개선에 효과가 없었다.
리소스 사용률은 좀 흥미로웠다. 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
typeORM의 poolSize를 20에서 40으로 올렸다.
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
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
- https://overcome-the-limits.tistory.com/696
- https://www.youtube.com/watch?v=zowzVqx3MQ4
- https://d2.naver.com/helloworld/5102792
- https://sawadeekab.tistory.com/15
Appendix
test-pyramid-20230303-003
Application Server
RDS
test-pyramid-20230303-004
application server
RDS
'Log > Experiment' 카테고리의 다른 글
exp015_Nginx 적용 여부에 따른 게시글 생성 요청 성공률 변화 관찰 (0) | 2023.03.06 |
---|---|
exp014_DB Connection Pool 수 변경 시에 따른 성능 변화 추가 실험 (0) | 2023.03.06 |
exp012_PM2 클러스터모드 적용 여부에 따른 게시글 생성 성공률 변화 관찰 (0) | 2023.03.03 |
exp011_게시글 생성 30,000개 생성 요청 시 30,000개가 모두 생성될까 (2) | 2023.03.03 |
exp010_게시글 생성 10,000개 생성 요청 시 10,000개가 모두 생성될까 (0) | 2023.03.02 |
댓글