2011-02-14 6 views
0

MongoDBを使用して、約300万のレコードを含むコレクションから列を削除しようとしています。私は、このコマンドを実行すると、それは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に限定しないようにしてくださいと言うのは面白いです。私はLinuxを使用していない、私は実際にはWindows Server 2008を使用しています。問題は、mongodのWindows Server 2008の実装はまだ非常に良いではないことができますか?私が気付いたもう一つのことは、コレクションをキャッシュするために使用するメモリをmongodがキャプチャしますが、メモリを解放することはありません。キャッシュに残っているので、mongodサービスを頻繁に再起動して、 – Justin

+0

すべての実装では、メモリマップファイルが使用されています。そのためにメモリを割り当てるのはOSの仕事です。そのリンクのセクションに「キャッシュされた」メモリが含まれていることに気がつきましたか?それはあなたがすべての記憶を意味するのでしょうか? –

関連する問題