2011-02-14 3 views
0

MongoDB를 사용하여 3 백만 개의 레코드가 포함 된 모음에서 열을 제거하려고합니다. 내가이 명령을 실행하면이 RAM이 부족하고 서버가 묶였던되고 물리적으로 재부팅 할 필요까지

db.Listing.update({}, { $unset: { Longitude: 1 } }, false, true); 

는 서버의 RAM 최대 이동하고 있습니다. 서버를 배치하지 않는 대규모 컬렉션에서 열을 제거하는 더 좋은 방법이 있습니까?

답변

0

나는 당신의 문제가 시스템 OOM 킬러라고 기대합니다. mongod에 대한 리소스를 제한하지 않도록해야합니다. 이 참조 : 당신이 VIRT을 사용하는 경우 http://www.mongodb.org/display/DOCS/Checking+Server+Memory+Usage

http://prefetch.net/blog/index.php/2009/09/30/how-the-linux-oom-killer-works/

. openvz와 같은 시스템을 사용하면 중지하거나 커밋 기능을 조정할 수 있습니다.

+0

mongod가 시스템에있는 모든 것을 사용하고있는 것처럼 보이기 때문에 자원을 mongod로 제한하지 말 것을 말하면 재밌습니다. 저는 리눅스를 사용하지 않고 있습니다. 실제로 Windows Server 2008을 사용하고 있습니다. Windows Server 2008의 mongod 구현이 아직 좋지 않습니까? 내가 알아 차린 또 하나의 사실은 mongod가 컬렉션 캐싱에 사용할 메모리를 캡처하지만 메모리를 해제하지 않는다는 것입니다. 따라서 mongod 서비스를 자주 다시 시작하여 서버를 계속 작동시켜야합니다. – Justin

+0

모든 구현은 메모리 맵 파일을 사용하며, 메모리를 할당하는 것은 OS의 임무입니다. "캐시 된"메모리에 대한 링크가 포함 된 섹션을 확인 했습니까? 그게 당신이 모든 기억을 의미하는 것입니까? –

관련 문제