MongoDB 데이터 삭제 후, 용량 반환 방법 ( compact 명령어 )

2021. 4. 9. 15:03mongodb

반응형

그냥 요즘 MongoDB를 모니터링 하던 중..

 

옛 추억이 떠올라 글을 하나 작성하기로 했다. 

 

DataBase란 차고로 DML이 꽃이라고 개인적으로 생각한다.

 

1. DML이란 무엇인가?

 

그냥 단순하게 말해서, 우리가 생각하는 데이터 핸들링 방법이다. 

 

즉, 조회하고(SELECT), 수정하고(UPDATE), 저장하고(INSERT), 지우는(DELETE) 기능!!!

근데 몽고디비를 관리하는데, 왜 이런게 생각 났냐 하면,

바로 delete 이슈이다.

성능이 느리다거나 그런 이슈가 아니다.

Delete를 하고 Disk를 반환하지 않는다.

MongoDB 운영 당시 Disk 사용률이 78%까지 올라간 상황이였다.

 

728x90



아직 시간은 있었으나,

개발서버로 사용하던 MongoDB의 디스크 사용량이

3개월도 안되서 가득차가고 있는 상황이었다.

실제 데이터는 약 1년 이상의 데이터를 저장할 수 있게

설계를 했던 상황이라, 뭔가 이상함을 느꼈다.

그래서 당시 이것저것 테스트해봤다.

Drop collection 를 수행하면, 디스크는 줄어든다.

delete collection를 수행하면, 디스크는 그대로다.

충격적인 결과였다.

지웠으면 디스크를 반환해야지!

왜 안돌려줘!!!

그래서 이것 저것 찾아보다 보니,

compact 라는 명령어가 있었다.

뭐 쉽게 말해, 디스크 조각 모음 같은거다.

즉, 안 쓰는 데이터를 정리하고, 사용을 반환하는

명령어이다.

명령어의 효과는 훌륭했다.

78%였던 Disk는 36%까지 내려갔다.

개발서버라 테스트 과정에서 잘못된 데이터들이 많이 쓰고 지웠었다.

그만큼 이 명령어의 효과가 큰것이다.

다른 사이트에서는 우리 회사만큼 효과를 보기 힘들 수 있다.

하지만 사용을 해보면, 최소 지금보다 많은 용량을

확보할 수 있을것이다.

그럼 그 명령어를 사용하는 방법을 알아보겠다.

 

1. 먼저 데이터 베이스에 접근한다.

use database_name

 

반응형

 

2. 조각모음(?) 하고 싶은 컬렉션을 선택한다.

db.runCommand( {compact : Collection_name, force : true} )

 

3. 그리고 초조해하게 기다린다...

 

다행히 이것저것 테스트해보니, collection lock은 걸리지 않는다.

 

운영서버에 날려도 큰 문제는 없었다.

 

단지 기다리는 시간이 초조하다.

 

사실 용량에 대한 완벽한 해결책은 아니다.

 

여러 글을 찾아보면, 그냥 다시 마이그레이션을 하는게 제일 좋은 방법이라고 한다....

 

다시 마이그를 하게 되면, 알다시피 운영은 중단될 것이고...

 

운영이 중단된 과정에서 쌓인 데이터도 임시 보관해야 하고...

 

마이그를 하기 위해...운영 데이터를 임시 저장할 저장 공간도 필요하다...

 

그 만큼 손이 많은 가는 작업이라 그리 추천하지는 않는다..

 

그렇다고 하지 말라는 것은 아니다...하면 좋다..

 

하지만..나는 안 했다.. 회사에서 지원도 안해줄거고..운영 중단도 허락해주지 않을거니까..

 

그래서 회사나 환경이 지원해준다면..시도해보는 것도 좋다..

 

오늘은 그냥 가볍게 몽고디비 관리하면서 생각난 추억을 한번 정리해 보았다.

 

 

 

 

 

 

 

반응형