오도원입니다.

건강과 행복을 위하여

컴퓨터공학/데이터베이스

Error Code: 2013. Lost connection to MySQL server during query

오도원공육사 2020. 7. 23. 10:15
반응형

1. Error 2013 

쿼리문을 실행했을 때, 

화질구지 양해부탁

다음과 같은 화면이나 하단 로그창에서 로딩아이콘만 계속 돌아가다가 2013에러가 발생할 때가 있다. 다음 에러는 해당 쿼리의 수행시간이 너무 오래걸려서 서버에서 끊어버린것이다. 

 

본인은 계속 중간에 멈춰버려서 해당 쿼리문을 될 때까지 실행하다가 다음과 같은 문제가 발생했다.

aws rds cpu 점유율, 해당 사진은 임의의 사진입니다.

AWS RDS의 cpu 점유율이 100%를 찍은 것이다. 왜이렇게 됐나 살펴보니깐 문제를 발견했다.

 

서버에서 끊어버린 쿼리문은 데이터베이스 내에서는 계속해서 수행중이라는 것이다.

다음 쿼리는 작업중인 프로세스를 확인하는 쿼리다.

show processlist;

 

해당 쿼리가 Execute 상태라는 것을 알 수 있다.

 

이때부터 문제가 발생했다. 쿼리가 안 끝나서 실행중인데 똑같은 쿼리를 실행하니깐 cpu가 남아나질 않는 것이다. 그래서 cpu 점유율을 100%를 찍어버린 것이다.

 

해당 프로세스는 kill command로 종료해야한다. 가장 좌측에 숫자가 process ID이다.

kill [processID]

 

2. 해결책

1. 임시방편

임시방편으로는 쿼리문 실행제한 시간을 늘리는 것이다.

이 시간들을 늘린다. 그러면 문제는 해결된다. 

단, 해당 쿼리가 오래걸린 이유가 쿼리문을 수행하는데 단지 오래걸린 경우에 한해서다.

 

이게 무슨말이냐면 오래걸려서 끝나는 코드가 있고, 그렇지 않은 경우도 있다. 그렇지 않은 경우는 바로 무한루프일 때이다.

 

2. 무한루프 해결

작성한 코드들을 살펴보면 분명 문제가 되는 코드가 있을 것이다. 본인은 함수하나가 while문을 사용하는데 인덱스 증감을 하지않아서 무한루프가 걸린것이었다. 해당 코드를 수정하니깐 문제는 즉시 해결되었다.

 

3. 정리

  • Error 2013은 해당 쿼리가 수행이 오래걸려서 서버에서 끊은 것이다.
  • 쿼리수행 제한 시간을 늘려서 해결할 수 있다.
  • 그래도 안된다면 높은 확률로 무한루프에 걸린 코드가 존재하는 것이다.
  • 함수는 만들면 바로바로 테스트를 수행하자. TDD!!!
반응형

'컴퓨터공학 > 데이터베이스' 카테고리의 다른 글

Database와 Storage의 차이점  (2) 2020.09.04
ORM이란 무엇인가  (0) 2020.09.03