해결된 질문
작성
·
14
0
안녕하세요
HikariCP maxLifetime 에 궁금한게 있어서 질문드려요,
mysql 에 직접적인 질문은 아닌 것 같지만 혹시 답변을 받을 수 있을까해서요
아래 같은 상황에서 HikariCP maxLifetime 이 connection pool 부족과 직접적인 연관이 있을 가능성이 있는지 궁금합니다.
상황
reader, writer ds의 connection pool 고갈 이슈가 잦은 서버 (50개씩 세팅, pod 5)
HikariCP maxLifetime 은 30s 로 세팅되어있음 (디폴트는 30분)
답변 2
0
안녕하세요 부릉부릉님 질문 주셔서 감사합니다.
개인적인 생각으로는 연관이 되어 있을꺼같아요.
maxLifeTime이 결국 커넥션이 풀에서 살아 있을 수 있는 최대 시간을 의미하게 되는데, 이 시간이 지나게 된다면, 새로운 커넥션을 만들어서 교체하는 작업이 일어나게 될 겁니다.
현재 상황을 예시로 들어보자면 30초로 설정이 되어 있다니, 풀 안의 모든 커넥션이 30초마다 교체가 되는 것이죠 또한 pod당 50개씩 구성이 되어 있으니 총 커넥션은 250개가 되겠네요.
이 상황에서 250개의 커넥션이 30초 주기마다 대량으로 폐기 되기 떄문에 안정된 커넥션 풀이라기보다는 일종의 팩토리같은 같은 상태가 되는게 아닐까 싶습니다.
커넥션을 재연결하는 과정도 결국 DB에 대한 요청이고, 애플리케이션에서 이 주기에 대해서 잠시 커넥션 부족 상태가 가능할꺼 같아서 결국 풀에 대한 고갈과 같은 현상이 발생할꺼 같다는 생각이 드네요.
물론 상황마다 일부 다른 부분은 있겠죠
그래서 30초라는 주기가 pool 고갈의 원인일 될 가능성이 일부 있지 않을까 싶습니다.
0
안녕하세요, 인프런 AI 인턴입니다. 부릉부릉님.
HikariCP의 maxLifetime
설정은 커넥션이 풀에서 유지될 수 있는 최대 시간을 설정하는 것으로, 데이터베이스 부하와 연결 부족 문제에 영향을 미칠 수 있습니다.
현재 maxLifetime
을 30초로 설정하셨는데 이는 매우 짧은 시간으로, 커넥션이 자주 생성되고 파괴될 수 있습니다. 이런 상황은 커넥션 풀의 고갈을 유발할 수 있으며, 데이터베이스와 HikariCP 사이의 자원 소비를 증가시킬 수 있습니다. 특히, 커넥션 풀의 크기가 50개로 설정되어 있고, 5개의 Pod가 있을 경우, 모든 Pod가 동시에 커넥션을 필요로 한다면 커넥션 풀의 고갈이 잦을 수 있습니다.
HikariCP의 maxLifetime
은 일반적으로 DB 서버의 wait_timeout
보다 짧게 설정해야 하지만, 너무 짧게 설정하면 자원 소모가 늘어나고 오히려 자주 연결을 다시 생성하는 상황이 생길 수 있습니다.
관련 내용을 다룬 기존의 답변을 통해 보다 정확한 설정을 이해하고 싶으시다면, 아래의 링크들을 참고해 보시는 게 좋을 것 같습니다:
이러한 자료들은 HikariCP와 관련된 설정을 이해하는 데 도움이 될 것입니다. 커넥션 풀 크기와 maxLifetime
의 균형을 맞추는 것이 중요하다는 점을 강조하고 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.