SPRING 개발환경에서 hikaril 설정 기본값을 활용하고 있었습니다.

spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
hikari:
max-lifetime: 1800000 # default value

 

Connection pool 누수 방지하기 위해 RDS Custom Instance Parameter groups 추가하였습니다.

다른설정은 기본값을 사용하며 아래 내용과 같이 wait_timeout 환경설정만 변경하였습니다.

 

하지만 개발환경 환경설정 wait_timeout(3600) 적용되어 DB 내 불필요한 Connection 누수가 발생되고 있었습니다.

로컬에서 어플리케이션 테스트 시 Too many connections 오류를 확인하지 못했다면 … 



 

AWS 기술문서를 찾아보니 Aurora DB 경우 Interactive_timeout 과 Wait_timeout 중 최소값을 사용하는 것으로

명시되어 있습니다.

 

그런데 왜 환경설정이 반영되지 않는지 한참 구글링을 해본 결과 !!

MySQL 8.0 가이드 문서에 답이 있었습니다.

Client에 따라 wait_timeout이 Global 값인 Interactive_timeout 값으로 초기화될 수 있다고 명시되어 있습니다.

On thread startup, the session wait_timeout value is initialized from the global wait_timeout value
or from the global interactive_timeout value, depending on the type of client 

 

 

따라서 저는 Interactive_timeout 값을 세션 변수인 wait_timeout 항목과 동일하게 설정하였습니다. 

 

추가적으로 Aurora에서 제공하는 인스턴스 별 max_connections 보다 큰 값을 적용하는 것도 고려해 봤습니다.

DB T3.small 인스턴스로 구성했다고 가정하면 max_connections 값이 (45) 로 설정됩니다.

-> 인스턴스 별 max_connections 기본값은 DBInstanceClassMemory 기준으로 설정

 

T type 인스턴스는 CPU를 사용하지 않을 때 일정 비율로 Credit이 적립되고, CPU 를 사용하면 Credit을 소모합니다.

Max_connections 을 기본값보다 큰 값으로 설정하는 경우 CPU 사용율이 높아져 빠르게 Credit 잔고가 소진되어, 

기준사용율 이상으로 CPU를 사용할 수 없게 됩니다.

 

읽어주셔서 감사합니다.

 

 

 

 

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기