상세 컨텐츠

본문 제목

RDS - connection Timeout error

DB

by 인생도NIO 2023. 10. 16. 15:28

본문

서버에서 connection Timeout error가 발생하는걸 종종 볼수있다. 


Connection Timeout에러원인 
-클라이언트가 서버에 커넥션을 요청할때에는 커넥션 타임아웃을 설정해둔다. 커넥션 요청을 보낸 후에 커넥션 수락을 얼마동안 기다릴지 정해두는 것이다. 어딘가에 문제가생겨 오지 않을시에 pending상태로 있을순 없기에 정해진시간까지 오지 않을시에 발생시킨다. 

주요 원인이 될만한 문제들에 대해 정리해보았다.

1. 네트워크 연결문제 ex)host주소 , db_user_name , db_password , port등 
2. 연결시간 제한에 대한 설정미흡

3. 서버가 과부하상태일때
4. 현재 DB가 지정된 포트로 수신대기중인지 확인 


그렇지만.. 필자는 현재 max_connections와 wait_timeout RDS > 파라미터그룹 설정에 대하여 생각을 좀 해보았다 . 
wait_timeout: 이 파라미터는 데이터베이스가 비활성 상태인 연결을 종료하기까지 기다리는 시간을 결정합니다. 이 값이 짧으면 비활성 상태인 연결이 빨리 종료되지만, 클라이언트가 재연결을 위해 자주 연결해야 할 수 있습니다. 이 값이 너무 길면 연결 풀이 비효율적으로 동작할 수 있습니다.
max_connections: 이 파라미터는 동시에 허용되는 최대 연결 수를 제어합니다. 이 값이 너무 낮으면 동시에 처리할 수 있는 연결 수가 제한될 수 있습니다. 따라서 이 값을 늘리면 동시에 처리할 수 있는 연결 수가 늘어납니다. 그러나 이 값이 너무 높으면 시스템 자원 부족 문제가 발생할 수 있습니다.

 

wait_timeout같은 경우엔 default로 설정하지않으면 28800초(8시간)이 잡혀버린다.
저는 이부분을 180초로 설정
설정 전 POC(연결취소율계산) 총커넥션수 / aborted_clients * 100으로 계산 진행
1%가까울수록 , 성능이 좋으며, 처리가 잘되고있다고 생각하면된다.

set global interactive_timeout = 180;

set global wait_timeout = 180;

쿼리상으로는 위와같이 설정하고, DB파라미터 그룹에 wait_timeout과 interactive_timeout을 검색해서 적용 후 재부팅을 진행해주어도 괜찮다. 

현재 운영서버를 직접 운영하다보니, 다양한 이슈를 직면하게되는데 처음에 max_connections만 늘려주고, config폴더에서 pool max값을 늘려주면 처리될줄알았다.  하지만... 중요한것을 간과하고있었던거같아서 검색해보고, 공부하면서 처리중에있다. 
내가 적은 방법이 정답이 아닐수도있다. 그렇지만 이또한 공부하는 과정이라 생각하고 오늘도 열심히 힘내는 주니어개발자가 되어서 내일의 나에게 더 나은 개발자가 될수있게 도와줄것이다. 

'DB' 카테고리의 다른 글

DB - 커넥션풀이란?  (0) 2023.10.16

관련글 더보기