[ 고민..] MySql 에서 slow query 에 인한 Too many connection 에러때문에.. DB 다운....

calpice의 이미지

일본 벤쳐에서 클라이언트의 어플을 개발하고 있는데요.

저희는 개발을 하고, DB에 관해서는 다른 회사가 담당을 하고 있습니다.

2개월 전 제가 데이터 조사를 위해서 실행시킨 쿼리가 엄청 무거워서 서비스용의 마스터 데이터 베이스가 한번 다운되었었습니다.

그때 실제 서비스용의 데이터 베이스에서 실행시킨게 문제가 되어서,

그 다음부터는 조사보고서를 작성하고, 클라이언트측에서 승인을 해야 조사를 해야하는 절차가 도입되었습니다.

또한 승인이 난 이후부터는 실행을 하더라도 슬레이브에서 실행하도록 되었지요.

일단 조사보고서를 쓰기 위해선 Explain을 이용해서 실행계획을 써 넣어야 하는데,

Explain 쿼리의 실행은 어떤 절차를 이용해서 실행을 할지는 딱히 정해져 있지는 않구요..

Explain 괜찮겠다 싶어서 실제 서비스용 데이터베이스에서 실행하곤 했습니다.

그리고.. 어제 또 마스터 데이터 베이스가 다운되었습니다.

제가 실행시킨 Explain의 쿼리 2개가 문제였지요.

Explain 쿼리에 대해서는 딱히 정해져 있는 절차는 없지만..

일단은 마스터에서 실행시켰다에 대해서는 제가 리스크에 대해서 전혀 생각이 없었던거죠.

상황을 보자면, 일단 한개든 두개든 slow query가 실행되고,

심야 4시정도에 마스터 데이터 베이스 빽업을 하는데..

거기서 아직 끝나지 않은 slow query가 있는 경우,

빽업과 쿼리 실행이 겹쳐서인지 그 이유로 데이터 베이스가 다운이 되는것 같습니다.

증상은 too many connection 에러이구요..

벌써 같은걸로 이번으로 두번째라...

클라이언트에도 회사에도 손실을 안겨줬으로

책임지고 회사를 그만두는것도 생각하고 있습니다.

일본에서 대학 졸업이후 취직한지 벌써 1년하고도 3개월이 넘었습니다.

저 나름 열심히 했다고 생각합니다.

야근도, 바쁘면 주말에 회사에 나와 일을 하는것도 마다 하지 않았구요..

이쪽 업쪽이 자기계발이 중요한 만큼 틈틈히 공부도 했구요...

일본어가 많이 능숙하지 않아서 여러가지 트러블이 많았지만,

이제 잘 풀려간다는 시점에서 또 이런일이 터지고 말았네요.

어찌되었건 저의 책임인건 알고 있습니다.

그래도 굉장히 뭐랄까.. 회의감이 든다고 할까..

지금 저의 기분은 이제 될때로 되라 라는 마음이네요.

할 만큼 했다고 생각하고..

더이상 여기서 상황이 안좋아질순 없다고 생각하니까 없던 깡도 생기는것 같네요

지금 회사를 접고, 일본 생활도 접고, 좀 쉴까 합니다.

여태까지 천만원 좀 넘게 모았는데

그걸로 여행이나 다녀올까 생각도 하고 있습니다.

이젠 좀 지쳤네요..

쉬고싶습니다..

주저리 주저리.. 쓸데없는 글 읽어주셔서 감사합니다..

yhsuk의 이미지

고생하셨습니다. 잠시 휴식을 가지는 것도 좋을 것 같습니다.

이미 끝난 문제이니 어쩔 수 없지만, 아래 내용을 남겨 봅니다.

too many connection 이면 DB가 죽은 건 아니고,
DB서버가 바빠서, 다른 서비스 클라이언트들의 요청에 대한 처리가 왜 걸리니
접속이 지속적으로 늘어나서 생긴 것 같습니다. 이럴 때 부하를 주는 쿼리(이 경우엔 explain XXX)를 멈추면,
서비스가 곧 정상으로 돌아오지 않을까 합니다.

해보질 않아서 모르겠지만 (explain 쿼리도 이 방법으로 가능한지?), 아래 내용을 참조해 보세요.
물론 아래 방법은 mysql 에 이미 접속한(사태가 생기기 전에) 콘솔이 하나는 있어야 하겠습니다.

http://stackoverflow.com/questions/3787651/how-can-i-stop-a-running-mysql-query

Signature :) - "여유를 갖고 행동하되 게을러지지 말자"

goforit의 이미지

직장 생활 몇번 하다보면 본인 아니게 그만둘 때도 있고, 잘했다고 칭찬 받을 때도 있습니다.
당장은 힘들겠지만, 나중에 보면 그 때가 또 다른 전환기(기회)였던 적지 않았습니다. 화이팅!

glay의 이미지

마스터와 슬레이브가 있는 상황에서 마스터의 DB 를 백업 한다는 것 자체도 좀 이상합니다.

보통은 슬레이브만 백업을 해야 겠지요 사용하고 있는 DB 는 어떤 DB 이며 (myisam? innodb? )

백업플랜은 어떤식으로 돌아가는지 궁금하군요. 보통 백업중에 어떤 쿼리 요청이 들어오거나 하면

lock 을 걸어 버릴 수도 있습니다.


--------------- 절취선 ------------------------
하늘은 스스로 삽질하는 자를 삽으로 팬다.

http://glay.pe.kr

calpice의 이미지

데이터 베이스는 다른 회사에서 관리를 합니다. 따라서 빽업 플랜이나 설정같은건 모르지요.

빽업을 한다는 이야기는 들은 이야기이고, 마스터를 빽업하는지, 슬레이브를 빽업하는지는 정확한지 않습니다.

발생한게 이번에 두번째 이므로, 첫번째와 종합해보면 다음과 같습니다.

1. 저녁 22시 정도 마스터에 슬로우 쿼리 실행
2. 이튿날 심야 4시에 빽업 -> 마스터에서 문제가 발생하므로 마스터 백업으로 추정
3. 심야 4시 이후 데이터베이스 접속에 Too many connection error

로그를 보면 두번 다 4시 이후에 정상적으로 움직이지 않네요.

데이터 베이스는 innodb 입니다.

calpice의 이미지

제가 좀 궁금한건 mysql에서의 쿼리실행 자체입니다.

아무리 느린 쿼리라도, 그게 하루가 걸리던 일주일이 걸리든,

쿼리 한개, 두개로, 데이터베이스가 접속이 불가능한 상태가 될수 있는지.. 궁금하네요.

으음.. 데이터의 구조등에 영향을 받는진 몰라도..

짧은 시간안에 수많은 쿼리를 실행하는 데이터 베이스 서버가

슬로우 쿼리 한두개로 접속이 불가능한 상태가 된다는게.. 이해가 가질 않네요..

mysql의 한계인지.. 서버의 문제인지도 궁금하구요.