1

上限付きコレクションのサイズを変更する機能を実装しようとしていますが、32 ビット システムで 2GB の使用可能な仮想スペースが不足していました。古いコレクションを削除して、同じ名前でサイズが異なる新しいコレクションを作成しようとすると、Mongo db は常に新しいファイルを作成していました。

それを修正するために、コレクションのサイズを変更するたびにrepairDatabaseを実行することにしました。これにより、Mongo Dbはその操作を実行する前にファイルサイズを縮小できます。Windows 2008 32 ビットでは問題なく動作しますが、Windows 2003 32 ビットでは一連の操作 'repairDatabase'、'dropCollection'、'createCollection' を試行した後 (10 回近く試行)、次のエラーが発生します。

Tue Aug 28 06:24:28 [conn7] MapViewOfFileEx for C:/Program Files/.../MongoDb/data/$tmp_repairDatabase_0/sbm.1 failed with errno:8 ?????????????????????????? (file size is 536870912) in MemoryMappedFile::map, terminating.

質問文字に置き換えられたメッセージは'Not enough storage is available to process this command.'. ここSERVER-6044とここSERVER-5244で見ました。しかし、この問題はどれも私の場合と同じではないようです。Mongo Db の終了を防ぐ方法はありますか? または、上限のあるコレクション サイズを変更する場合、ファイル サイズを小さくするより良い方法はありますか?

また、サイズが 500MB を超えないコレクションのみを作成しようとしています (理由については、この質問を参照してください)。私が使用しているMongo Dbのバージョンは2.0.7です

4

1 に答える 1

1

「repairDatabase」が実行されているときは、通常の実行状態の 2 倍のスペースが必要になるため、データベースが 1 GB より少し大きいだけでも、32 ビット システムでは 2 GB の制限を使い果たしていました。解決策は、500MB よりも小さいサイズの上限付きコレクションを使用し、「repairDatabase」で使用できるスペースを考慮に入れることです。

于 2012-08-29T14:54:42.953 に答える