이번에는 마리아DB SQL 조회시 담은공간이 없다고 뜨는 Disk Full 문제를 해결해보는 포스팅이다.
현상
어느날 개인적으로 운영하고 있는 서비스의 유입 사용자가 한자리 수 단위로 급감하여 서비스를 확인해보니.. 서버가 다운됐다… 정확히 말하자면 톰캣서버가 다운되진 않았고 서비스들을 점검해보니 DB를 타는 서비스들만 오류가 발생했다.
과거에도 비슷한 사례가 있었다. 그때는 로그성 테이블이 있었는데, 요기가 테이블의 최대치까지 차버려서 문제가 되었는데, 이번에도 그건가 해서 SELECT SQL을 돌려보니 위와 같은 오류가 발생했다.
💡 SQL 오류 (1021): Disk full (/tmp/#sql_258e0d_0.MAI); waiting for someone to free some space… (errno: 28 “No space left on device”)
원인
해당 오류는 DB가 동작하면서 필요한 임시데이터를 tmp 이하 경로에 적재하여 사용하는데 디스크 용량부족으로 임시 데이터 생성조차 되지 않아 발생한 오류였다.
디스크 용량은 왜 부족해진거야?
예전에는 비슷한 케이스로는 실제로 테이블에 row가 수십이었나, 수백만건이 쌓야 순수 row 행수로 데이터가 꽉차 서버 DB의 용량만으로 디스크 공간이 꽉차 문제가 발생했었다.
이럴 경우 DBMS 관리툴로 (난 HeidiSQL 을 사용한다) 문제가 있을법한 테이블을 보면 비 이상적으로 많은 로우가 나타나거나 빨갛게 문제가 있다고 나오기때문에 DELETE 로 지워주던지하면 된다.
하지만 이번 케이스의 경우는 DB때문에 용량이 꽉 찬 케이스가 아니었다..그렇다면.. 의심되는 것은…!?
정답은 WAS 로그 때문..
하기 명령어로 서버의 디스크 사용현황을 한번 확인해 보았다.
df -h
홀리씟 일단 디스크를 모두 사용하고 있는건 realFact 로 확인되었다.. 어 ? 그럼 데이터가 대량 생성될껀 DB의 log 테이블이 아니라면… 혹시나 WAS로그..?
먼가 생각해보니…보통 3개월의 log를 로컬 서버에 저장해둘텐데.. 나는 그 설정은 해두지 않았다…따로 설정하지 않았다면…제작년부터 운영하던 모든 로그가 남아있을텐데 이것때문인가??
허걱.. 바이트 단위가 바로 GB로 환산되진 않았지만 대략… 내 서버 디스크가 40GB 짜리니까… 앞에 34면 대략 34기가가 아닐까 생각이 들었다.
해결
허걱… 역시는..역시였다… 대략 로그파일이 35기가가 쌓여..서버 디스크에 공간이 없었던것.. 그래서 MariaDB에서 쿼리 명령 실행하는데도 DBMS단에서 사용하는 임시데이터 생성할 공간도 없어…이지경이 되었던것.. 위 파일들은 필요없어서 일단 다 삭제했다..
사실.. 간단한 경량 서비스라.. 로깅 레벨이나, 보존기간을 설정해두지 않았는데.. 이번에 새삼.. 로깅관리도 중요하구나 생각이 들었다..
파일 삭제를 했지만. 아직도 서버에스는 디스크 용량을 100%사용으로 잡고있었다. 아마.. 파일을 가르키는 주소값만 없어지고 Free 된 내용이 반영된 것 같지않아 깔끔하게 서버 재부팅을 했다.
허걱..라이트 세일 재부팅을 했는데.. 계속 터미널이 붙지 않아서 식겁했지만.. 재부팅말고 중지>시작 단계로 구분하여 리부팅 시도하니 정상적으로 터미널이 붙었다.
그 후 디스크 상태를 확인하니 정상적인 디스크 사용량으로 변해있었다. 후.. 이후 모든 서비스들을 다시 부팅하고 서버 복구 완료..!
결론
💡 서버에서 공간을 많이 차지하고 있는 파일을 삭제해라!