AWS RDS 사용중 MySQL server has gone away 에러 발생 !?
- Study/서버
- 2020. 5. 29. 19:19
업무시간에 앱 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 값을 설정할 수 있다.
파라미터 검색창에다 max_allow라고 치면 max_allowed_packet 설정이 나오는데 허용된 값이 1KB ~ 1GB다. 아마 값이 빈값으로 되어있는 거 보니 디폴트 값으로 되어있을 텐데... 기껏 해봐야 1MB 일듯?
그런데 이걸 높게 바꾸면 DB 커넥션마다 자원을 상대적으로 많이 차지하게 되어서 서버 부하가 갈 수도 있다. 따라서 그냥 50만명 한 번에 조회하지 않고 반땅 해서 조회하도록 소스를 바꾸기는 했는데, mysql 측에서도 이 값을 어느 정도 높이는 게 안전하다고 권고하고 있다.
대부분 16M~32M 정도의 값이 레퍼런스로 사용되고 있는것 같으니 추후 모니터링하면서 조금씩 올려봐야겠다.
mysql 포럼 -
forums.aws.amazon.com/thread.jspa?threadID=253118
'Study > 서버' 카테고리의 다른 글
Django에서 GraphQL 사용해보기 (1) | 2020.07.26 |
---|---|
ec2에 docker django 이미지 만드는데 자꾸 no space left on device 에러날 때 (1) | 2020.06.14 |
docker로 mysql, redis 실행. Django와 연결 (0) | 2020.02.23 |
윈도우 서버 세션 종료시 락 안걸리게 하기. (0) | 2019.06.12 |
Double 소수점 표기 , 데이터베이스와 소스상의 표기 차이 (0) | 2018.12.12 |