AWS RDS 사용중 MySQL server has gone away 에러 발생 !?

     

MySQL server has gone away!!!

 

업무시간에 앱 push를 발송하려고 하는데 갑자기 서버에서 에러가 발생했다!!!

 

"MySQL server has gone away"

 

...?

순간 DB서버가 죽은 줄 알고 AWS콘솔에 접속했는데 다행히 DB는 살아있었다.. (안도)

이제 문제가 무엇인지 파악해야 하는데 AWS RDS 에러 로그를 보면 packets의 문제라고 나온다

 

2020-05-28T12:33:28.397009Z 60882633 [Note] Aborted connection 60882633 to db: 'db_name' user: 'user_name' host: '172.31.26.255' (Got an error reading communication packets)

 

 

위 메시지로 검색하보면 여러 가지 발생 가능성이 검색되는데, 그중에서 제일 의심되는 것은 packet size였다. push를 보내는 대상이 50만 명이었는데 쿼리로 50만 명을 조회 때리니까 packet size가 커져서 발생했다는 게 가설이다. 아무래도 점점 사용자가 늘어나면서 한 번에 보내는 대상이 커져서 쿼리까지 먹통이 된 것 같다. 

 

일단 해결방법으로는 mysql config에서 packet size를 증가하는 것이다. 

aws 콘솔에 들어가서 rds에 파라미터 그룹에 가면 각종 config 값을 설정할 수 있다.

 

aws 콘솔 -> 파라미터 그룹에서 config를 검색할 수 있다.

파라미터 검색창에다 max_allow라고 치면 max_allowed_packet 설정이 나오는데 허용된 값이 1KB ~ 1GB다. 아마 값이 빈값으로 되어있는 거 보니 디폴트 값으로 되어있을 텐데... 기껏 해봐야 1MB 일듯? 

 

그런데 이걸 높게 바꾸면 DB 커넥션마다 자원을 상대적으로 많이 차지하게 되어서 서버 부하가 갈 수도 있다. 따라서 그냥 50만명 한 번에 조회하지 않고 반땅 해서 조회하도록 소스를 바꾸기는 했는데, mysql 측에서도 이 값을 어느 정도 높이는 게 안전하다고 권고하고 있다.

 

대부분 16M~32M 정도의 값이 레퍼런스로 사용되고 있는것 같으니 추후 모니터링하면서 조금씩 올려봐야겠다.

 

mysql 포럼 -

forums.aws.amazon.com/thread.jspa?threadID=253118

 

 

반응형

댓글

Designed by JB FACTORY